home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1995 November
/
EnigmA AMIGA RUN 02 (1995)(G.R. Edizioni)(IT)[!][issue 1995-11][Skylink CD].iso
/
earcd
/
gfx
/
vtdevel3.lha
/
SourceAGA
/
Vector.s
< prev
next >
Wrap
Text File
|
1994-06-27
|
84KB
|
4,090 lines
;vector
rout ;when this is off, the routine-file will be
;assembled, on=testing
;debug ;when this is on, colors in the background will
;show how much time the routine needs.
;ntsctest ;when this is on, the routineplayer is in ntsc-mode
;ocs ;off=AGA,on=OCS testing not possible on OCS !
routinemode equ 256+15 ;the routinemode !
; VideoTracker AGA developer source 25-12-93
; 24-bits colors, Super-HiRes, HAM8, maximum burstmode (64 pixels aligned)
; wich makes low-resolution overscan a bit ugly.
; no "interactive" support anymore, it's only used by Kick 1.3 users.
; the first part of the source handles the things that are necessary to
; show the picture/copper and playing of the routine.
; the part between the "***" lines is the routine-source.
; at the bottom of the file, there are the necessary incbin-files who
; are needed to test the routine.
; these are saved with "save effect" in videotracker. they are raw
; data files which can be fonts,pictures,landscapes,vectorobjects
; etcetra.
; the incbin-files are put in the "variables" table, in the routine-
; player-handler
; the place where it's done can be found by searching for "!!!"
opt a+ ;devpac 3 optimize
opt o+
ifnd ocs
vew_wid equ 48
endc
ifd ocs
vew_wid equ 44
endc
vew_hgt equ 290
win_hgt equ 117
win_str equ $1a
ifd ocs
pic_wid equ 4 ;wide in bytes
pic_hgt equ 6 ;hoogte
pic_dpt equ 8 ;number planes
pic_ani equ 10 ;aantal effes (anim)
pic_vew equ 12 ;viewmode
pic_cycstr equ 14 ;cycle start (*4)
pic_cycend equ 15 ;cycle end (*4)
pic_cycspd equ 16 ;cycle speed (*4)
pic_cycadd equ 17 ;cycle add (*4)
pic_palnum equ 30 ;aantal kleuren
pic_pal equ 32 ;palette start
pic_palsiz equ 256*2 ;vaste palette size
pic_raw equ pic_pal+pic_palsiz ;palette start
endc
ifnd ocs
pic_wid equ 4 ;wide in bytes
pic_hgt equ 6 ;hoogte
pic_dpt equ 8 ;number planes
pic_ani equ 10 ;aantal effes (anim)
pic_vew equ 12 ;viewmode
pic_cycstr equ 14 ;cycle start (*8)
pic_cycend equ 15 ;cycle end (*8)
pic_cycspd equ 16 ;cycle speed (*8)
pic_cycadd equ 17 ;cycle add (*8)
pic_widmod equ 46 ;animation-width modulo
pic_future equ 50 ;free future space
pic_palnum equ 62 ;aantal kleuren
pic_pal equ 64 ;palette start
pic_palsiz equ 256*4 ;vaste palette size (longwords)
pic_raw equ pic_pal+pic_palsiz ;palette start
endc
var_len equ $300 ;lengte vartabel
var__GfxBase equ $000 ;graphics lib
var_pic1 equ $004 ;current picture
var_anispd1 equ $008 ;animspeed
var_anitel1 equ $00c ;animcount
var_cprbck equ $010 ;copperback
var_bck equ $014 ;background
var_pic2 equ $018 ;current picture
var_ntsc equ $01c ;ntsc/pal frequence
var_lnd equ $020 ;landscape
var_anilop1 equ $024
var_rottrg equ $028 ;effect trigger
var_txt1 equ $040 ;text
var_txt16 equ 15*4+var_txt1
var_vec1 equ $080 ;vectors
var_vec16 equ 15*4+var_vec1
var_fon1 equ $0c0 ;fonts
var_fon16 equ 15*4+var_fon1
var_cols1 equ $100 ;colorsets
var_cols16 equ 15*4+var_cols1
var_obj1 equ $180 ;objects
var_obj16 equ 15*4+var_obj1
ifd rout
;videotracker routine-test
incdir "w:include/"
include "exec/types.i"
include "graphics/gfxbase.i"
include "lvo/graphics_lib.i"
incdir 'videotracker:effect/'
SECTION 1,CODE_C
tus
lea var,a0
move.l #rottube,var_vec1(a0) ;incbinfile !!!
; move.l #rotsrc,curpic1 ;picture !!!
; move.l #rotsrc,curpal1 ;palette !!!
; move.l #rotset,var_cols1(a0) ;colorset !!!
bsr paltabres
move.l ($4).w,a6
sub.l a1,a1
jsr -$126(a6) ;findtask
move.l d0,curtsk
move.l d0,a0
move.l $b8(a0),tskpri
lea dosnam,a1 ;doslib openen
moveq.l #0,d0
move.l (4).w,a6
jsr -408(a6) ;openlib
move.l d0,doslib
bsr.s label5 ;videotracker opstarten
move.l curtsk,a0
move.l tskpri,$b8(a0)
move.l ($4).w,a6
jsr -$84(a6) ;forbid
move.l doslib,a1
move.l (4).w,a6
jsr -414(a6) ;closelib
moveq.l #0,d0
rts
label5
move.l (4).w,a6 ;workbench gedoe
move.b 530(a6),ntscmode ;50/60 hertz halen
ifd ntsctest
move.b #60,ntscmode ;60 hertz (ntsc)
endc
cmp.b #50,ntscmode ;ntsc ?
beq.s str.ntsc
move.l #vew_hgt-56,hogscr ;set NTSC screen hight
str.ntsc
lea cprjmp,a2 ;copjmp zetten !
move.l #cprbck-8,d0
move.w d0,6(a2)
swap d0
move.w d0,2(a2)
lea cprbck-8,a2 ;copstr zetten !
move.l #cpr,d0
move.w d0,6(a2)
swap d0
move.w d0,2(a2)
bsr cprsprrem ;sprites legen
lea gfxnam,a1 ;graphics lib openen
move.l (4).w,a6
jsr -408(a6) ;openlib
move.l d0,a6
move.l d0,gfxlib
move.l 38(a6),oldcprlist
bset #1,$bfe001
bsr copbuf ;copper vullen
bsr sysoff
gadrun
btst #6,($bfe001).l
bne gadrun
scrend
scrend.play
bsr syson
move.l gfxlib,a1
move.l (4).w,a6
jsr -414(a6) ;closelib
scrend.qb
moveq.l #0,d0
rts
;vertical blank interrupt, no blits.
;handles counters,interlace,sprite
;level 3
intvb
bra.s intvb.cnt
dc.l 'VIDU'
dc.l 'LOOP'
intvb.cnt
movem.l d0-d7/a0-a6,-(sp)
lea ($dff000).l,a6
move.w $01e(a6),d0
btst #5,d0 ;vblank ?
bne.s intvb.vb
bra.s intcop.end
intvb.vb
bsr grap
bsr palctr ;palette zetten
bsr.s copbuf ;copper vullen
intvb.end
move.w #$0020,$09c(a6) ;vb bit wissen
movem.l (sp)+,d0-d7/a0-a6 ;multitask uit, shit !
rte
intcop.end
movem.l (sp)+,d0-d7/a0-a6
move.l intvbold,-(sp)
rts
;transmission buffer empty routine, BLIT !
;handles routines,animations
inttbe ;tbe interrupt
movem.l d0-d7/a0-a6,-(sp)
lea ($dff000).l,a6
move.w $01e(a6),d0
btst #0,d0 ;no tbe ?
beq.s intdskblk
btst #6,($bfe001).l ;muis ingedrukt ?
beq.s inttbe.cop
btst #2,($dff016).l
beq.s inttbe.cop
ifd debug
move.w #$700,$dff180
endc
bsr rotply ;routineplayer BLIT !
bsr.s copbuf ;copper vullen
ifd debug
move.w #$070,$dff180
endc
inttbe.cop
inttbe.end
move.w #$0001,$09c(a6)
movem.l (sp)+,d0-d7/a0-a6
rte
intdskblk
move.w #$0001,$09c(a6) ;be sure for no tbe handling
movem.l (sp)+,d0-d7/a0-a6
move.l inttbeold,-(sp)
rts
;moves the copperbuffer to the copperlist
;sort of double buffering
copbuf
movem.l d0-d7/a0-a6,-(sp)
lea ($dff000).l,a6
copbuf.novb ;copperchange overslaan
moveq.l #0,d0
move.b $005(a6),d0
lsl.w #8,d0
moveq.l #0,d1
move.b $006(a6),d1
add.w d1,d0
cmp.w #$4,d0 ;lower limit, all stations 100%
blt copbuf.novb
cmp.b #50,ntscmode
beq.s copbuf.pal
cmp.w #$133-72-8,d0 ;ntsc grens
bge copbuf.novb
bra.s copbuf.cont
copbuf.pal
cmp.w #$133-8,d0 ;pal grens
bge copbuf.novb
copbuf.cont
lea gra.s,a0 ;buffer copieren
lea cprbuf,a1
copbuf_aga ;AGA stuff :)
move.l #(gra.ql)/4-1,d0
copbuf.a
move.w 2(a0),2(a1)
add.l #4,a0
add.l #4,a1
dbra d0,copbuf.a
copbuf.end
movem.l (sp)+,d0-d7/a0-a6
rts
;goes back to the workbench
syson
movem.l d0-d7/a0-a6,-(sp)
move.w #$0001,$dff09a ;tbeint uit
move.l intvbold,($6c).w
move.l inttbeold,($64).w
move.l 4,a6
jsr -138(a6) ;permit
move.l gfxlib,a6
jsr -462(a6) ;disownblitter
move.l wbview,a1
move.l gfxlib,a6
jsr _LVOLoadView(a6) ; Fix view
jsr _LVOWaitTOF(a6)
jsr _LVOWaitTOF(a6) ; wait for LoadView()
syson.ras
cmp.b #$c0,$dff006 ;prevent copperjump
bne syson.ras
move.l gfxlib,a6
move.l gb_copinit(a6),$dff080 ; Kick it into life
movem.l (sp)+,d0-d7/a0-a6
rts
;goes back to the gadgetscreen
sysoff
movem.l d0-d7/a0-a6,-(sp)
move.l gfxlib,a6
move.l gb_ActiView(a6),wbview ;current view
sub.l a1,a1 ; clear a1
jsr _LVOLoadView(a6) ; Flush View to nothing
jsr _LVOWaitTOF(a6) ; Wait once
jsr _LVOWaitTOF(a6) ; Wait again.
move.l gfxlib,a6
jsr -456(a6) ;ownblitter
move.l 4,a6
jsr -132(a6) ;forbid
move.l ($6c).w,intvbold
move.l #intvb,($6c).w
move.l ($64).w,inttbeold
move.l #inttbe,($64).w
move.w #$8001,$dff09a ;tbeint aan
bsr gracpr ;reset copper
bsr copbuf ;copy copper
move.l #cpr,$dff080
movem.l (sp)+,d0-d7/a0-a6
rts
cprsprrem
movem.l d0-d7/a0-a6,-(sp)
lea cprspr,a0
move.l #sprdat,d0
move.w #7,d1
cprsprrem.a
move.w d0,3*2(a0)
swap d0
move.w d0,1*2(a0)
swap d0
add.l #8,a0
dbra d1,cprsprrem.a
movem.l (sp)+,d0-d7/a0-a6
rts
varset ;variablen neerzetten
movem.l d0-d7/a0-a6,-(sp)
move.l #var,a0
move.l #cprbck,var_cprbck(a0)
move.l gfxlib,var__GfxBase(a0)
move.b ntscmode,var_ntsc(a0)
move.l curpic1,var_pic1(a0) ;variabel
move.l curpic2,var_pic2(a0) ;variabel
move.w anispd1,var_anispd1(a0)
move.w anitel1,var_anitel1(a0)
move.b anilop1,var_anilop1(a0)
move.l #rottrg,var_rottrg(a0)
movem.l (sp)+,d0-d7/a0-a6
rts
;this routine handles all videotracker-routines
rotply
movem.l d0-d7/a0-a6,-(sp)
moveq.l #0,d0
lea currot1,a2 ;routine 1
move.w rotinf1,d0 ;routine info
bsr.s rotplyr
rotply.end
movem.l (sp)+,d0-d7/a0-a6
rts
;this routine handles 1 routine, BLIT !
rotplyr
movem.l d0-d7/a1-a6,-(sp)
move.l #rot,(a2) ;routinestart address
; move.b #50,ntscmode ;ntsc/pal hz
clr.l curpic2 ;background picture
move.w #1,anispd1 ;animationspeed
clr.w anitel1 ;animation position
lea var,a0 ;communication-table
move.b #0,anilop1 ;animloop off/on !!!
move.w #32,anispd1 ;animdelay !!!
move.l #routinemode,d0 ;routinemode !!!
sub.l a0,a0 ;picture info legen
tst.l (a2) ;is er een routine ?
beq rotplyr.end ;interlace handling
move.l intdel,d2 ;delay
move.l inttel,d1 ;teller
cmp.w d2,d1
blt rotplyr.end
clr.l inttel
bsr varset ;variabelen updaten
move.l (a2),a1 ;routine halen
move.l #var,a0 ;variablen tabel
movem.l d3-d7/a1-a6,-(sp)
moveq.l #0,d1 ;vars wissen
moveq.l #0,d2
moveq.l #0,d3
moveq.l #0,d4
moveq.l #0,d5
moveq.l #0,d6
moveq.l #0,d7
sub.l a2,a2
sub.l a3,a3
sub.l a4,a4
sub.l a5,a5
jsr 4(a1) ;routine afwerken
movem.l (sp)+,d3-d7/a1-a6
;Routine:
;
;Input:
;a0=variabelentabel
;d0=routinemode
;
;Output:
;a0=picture
;d1=copperlist
;d2=interruptdelay (NOT used till now)
move.w #$0020,$dff09a ;vb off !
move.l d2,intdel ;delay
lea cprjmp,a3
move.l #cprbck-8,d0
cmp.l (a2),a1 ;routine ondertussen gewipt ?
bne.s rotplyr.nocop
tst.l d1 ;copperlist ?
beq.s rotplyr.nocop
move.l d1,d0
rotplyr.nocop
move.w d0,6(a3)
swap d0
move.w d0,2(a3)
cmp.l #0,a0 ;picture ?
beq.s rotplyr.endvb
move.l a0,curpic1 ;current picture (cycle)
move.l a0,curpal1 ;current palette
tst.b rotdpl ;plane is geleverd
beq.s rotplyr.set
clr.b rotdpl
clr.l cycdel1 ;cycle info wissen
clr.l 4+cycdel1
clr.l curfrm1 ;curfrm1, altijd planes zetten
rotplyr.set
clr.b dplctr
bsr.s grap
bsr grac ;colorset
rotplyr.endvb
move.w #$8020,$dff09a
rotplyr.end
movem.l (sp)+,d0-d7/a1-a6
rts
;removes possible routine-coppers
gracpr
movem.l d0-d7/a0-a6,-(sp)
lea cprjmp,a3
move.l #cprbck-8,d0 ;copperlist resetten
move.w d0,6(a3)
swap d0
move.w d0,2(a3)
movem.l (sp)+,d0-d7/a0-a6
rts
grap ;d7=anim
movem.l d0-d7/a0-a6,-(sp)
clr.l d7
tst.l curpic1 ;current picture ?
beq grap.end
move.l curpic1,a2 ;normal pic halen
lea gracprscr,a1 ;window neerzetten
move.l hogscr,d1
move.w pic_hgt(a2),d3 ;pic hoogte
move.w pic_vew(a2),d5
btst #2,d5 ;interlace ?
beq.s grap.nohi4
lsr.w #1,d3 ;/2
grap.nohi4
cmp.w d3,d1
bge.s grap.hog
move.w d1,d3
grap.hog
sub.w d3,d1
lsr.w #1,d1
add.w #win_str,d1
move.w d1,d2
add.w d3,d2
move.b d1,2(a1) ;y start
move.b d2,6(a1) ;y end
move.w pic_wid(a2),d4 ;pic breedte in bytes
lsl.l #3,d4
move.l #vew_wid*8,d0
move.l #0,d1
move.l #$61,d6
cmp.w #40,pic_wid(a2) ;overscan ?
ble.s grap.noov1
move.l #$41,d6
grap.noov1
move.w pic_vew(a2),d5
btst #15,d5 ;hires ?
beq.s grap.nohi2
move.l #(vew_wid)*8*2,d0
move.l #1,d1
move.l #$61,d6
cmp.w #80,pic_wid(a2) ;overscan ?
ble.s grap.nohi2
move.l #(vew_wid)*8*2,d0
move.l #$51,d6
bra.s grap.noshi2
grap.nohi2
btst #6,d5 ;super hires ?
beq.s grap.noshi2
move.l #(vew_wid)*8*4,d0
move.l #2,d1
move.l #$61,d6
cmp.w #80*2,pic_wid(a2) ;overscan ?
ble.s grap.noshi2
move.l #(vew_wid)*8*4,d0
move.l #$51,d6
grap.noshi2
clr.w d5
cmp.w d0,d4 ;breeder dan scherm ?
ble.s grap.c
move.w d4,d5
move.w d0,d4
sub.w d0,d5 ;modulo
lsr.w #3,d5 ;/8
grap.c
lsr.w d1,d0
lsr.w d1,d4
move.w d0,d2
sub.w d4,d2
lsr.w #1,d2 ;/2
add.w d6,d2
move.b d2,3(a1) ;x start
move.w d2,d3 ;d3 bewaren !
add.w d4,d2 ;d4 bewaren !
move.b d2,7(a1) ;x end
move.w pic_vew(a2),d6
btst #15,d6 ;hires ?
beq.s grap.nohi5
add.l d4,d4 ;*2
bra.s grap.noshi5
grap.nohi5
btst #6,d6 ;super hires ?
beq.s grap.noshi5
add.l d4,d4 ;*4
add.l d4,d4
grap.noshi5
move.l d7,-(sp)
move.w pic_vew(a2),d6
move.l #17,d0
move.l #4,d1 ;ecs 1
move.l #3,d7
btst #15,d6 ;hires ?
beq.s grap.nohi3
move.l #17,d0 ;ecs 9
move.l #4,d1 ;ecs 2
move.l #2,d7
bra.s grap.noshi3
grap.nohi3
btst #6,d6 ;super hires ?
beq.s grap.noshi3
move.l #17,d0 ;ecs 9
move.l #4,d1 ;ecs 2
move.l #1,d7
grap.noshi3
sub.w d0,d3
lsr.w #1,d3
move.w d3,10(a1) ;ddfstrt
move.w d4,d2 ;pic breedte in pixels
lsr.w #4,d2 ;/16
sub.w d1,d2 ;-1
lsl.w d7,d2 ;*8
add.w d2,d3
move.w d3,14(a1) ;ddfstop
move.l (sp)+,d7
lea pic_raw(a2),a0
moveq.l #0,d2
move.w pic_dpt(a2),d2
sub.l #1,d2
muls pic_wid(a2),d2
add.w d2,d5
move.w pic_vew(a2),d2 ;viewmode add
btst #2,d2
beq.s grap.nolace4
moveq.l #0,d2
move.w pic_dpt(a2),d2
muls pic_wid(a2),d2
add.w d2,d5 ;interlace gedoe
grap.nolace4
lea gracprbpl,a4 ;iffpln neerzetten
lea gracprpln,a0 ;iffpln neerzetten
moveq.l #0,d2
move.w pic_dpt(a2),d2 ;plnnummer 1 halen
move.l #8,d6 ;copper step !
tst.l curpic2 ;2de picture ?
bne.s grap.pic2
grap.nopic2
move.w d5,34(a1) ;modulo oneven zetten
bra grap.nodpl
grap.pic2
move.l curpic2,a3 ;oneven plane
move.l curpic2+4,a6 ;oneven plane
move.l currot2,a5 ;oneven plane
clr.l curpic2 ;mischien niet goed
clr.l curpic2+4 ;mischien niet goed
clr.l curpal2 ;mischien niet goed
clr.l currot2 ;mischien niet goed
cmp.l curpic1,a3 ;picture hetzelfde ?
beq.s grap.nopic2
cmp.l #0,currot1 ;routine ?
beq.s grap.norot
cmp.l currot1,a5 ;routine hetzelfde ?
beq.s grap.nopic2
grap.norot
cmp.b #4,d2 ;> 16 kleuren ? (AGA)
bgt grap.nopic2
move.w pic_dpt(a3),d3 ;plnnummer 2 halen
cmp.b d2,d3 ;gelijke plnummers ?
bne.s grap.nopic2
move.w pic_vew(a2),d1
cmp.w pic_vew(a3),d1 ;view gelijk ?
bne.s grap.nopic2
move.w pic_vew(a2),d1 ;groter dan view test
btst #6,d1 ;super hires ?
beq.s grap.nohi2a
move.l #vew_wid*4,d1
bra.s grap.nohi2b
grap.nohi2a
btst #15,d1 ;hires ?
beq.s grap.noshi2a
move.l #vew_wid*2,d1
bra.s grap.nohi2b
grap.noshi2a
move.l #vew_wid,d1
grap.nohi2b
cmp.w pic_wid(a2),d1 ;breder dan view ?
bgt.s grap.small
cmp.w pic_wid(a3),d1 ;breder dan view ?
bgt.s grap.small
move.w pic_vew(a2),d1
btst #2,d1
beq.s grap.nolace8a
move.l hogscr,d1
add.l d1,d1
bra.s grap.nolace8b
grap.nolace8a
move.l hogscr,d1
grap.nolace8b
cmp.w pic_hgt(a2),d1 ;hoger dan view ?
bgt.s grap.small
cmp.w pic_hgt(a3),d1 ;hoger dan view ?
bgt.s grap.small
bra.s grap.big
grap.small
move.w pic_hgt(a2),d1 ;wid+hgt<vew
cmp.w pic_hgt(a3),d1 ;hoogte gelijk ?
bne grap.nopic2
move.w pic_wid(a2),d1
cmp.w pic_wid(a3),d1 ;breedte gelijk ?
bne grap.nopic2
grap.big
move.l a3,curpic2 ;toch wel goed !
move.l a6,curpic2+4
move.l a3,curpal2
move.l a5,currot2
tst.b dplctr ;dual playfield al gezet ?
beq grap.nocop
move.w 30(a1),34(a1) ;modulo copieren
move.w 2(a4),d1 ;bplcon0
btst #10,d1 ;al dual playfield ?
beq.s grap.ta
move.w 2(a0),10(a0) ;plane 0>1 copieren
move.w 6(a0),14(a0)
move.w 18(a0),26(a0) ;plane 2>3 copieren
move.w 22(a0),30(a0)
move.w 34(a0),42(a0) ;plane 4>5 copieren
move.w 38(a0),46(a0)
move.w 50(a0),58(a0) ;plane 6>7 copieren
move.w 54(a0),62(a0)
bra.s grap.tb
grap.ta
move.w 24(a0),58(a0) ;plane 3>7 copieren
move.w 28(a0),62(a0)
move.w 18(a0),42(a0) ;plane 2>5 copieren
move.w 22(a0),46(a0)
move.w 10(a0),26(a0) ;plane 1>3 copieren
move.w 14(a0),30(a0)
move.w 2(a0),10(a0) ;plane 0>1 copieren
move.w 6(a0),14(a0)
grap.tb
move.l #palette,a3 ;palette copieren
move.w #16-1,d1
grap.pal
move.l (a3)+,60(a3)
dbra d1,grap.pal
grap.nocop
add.w d3,d2 ;aantal bitplanes
cmp.w #8,d2 ;8 bitplanes ?
blt grap.no8planes2
move.w #%10000,d2 ;only bit 4
bra grap.8planes2
grap.no8planes2
lsl.w #8,d2
lsl.w #4,d2
grap.8planes2
or.w #$400,d2 ;dual playfield aan
move.w d2,2(a4) ;bplcon0
movem.l d0-d7/a0-a6,-(sp)
move.l curpic,a2 ;animpic ?
move.l curfrm,d7
cmp.l #0,a2
bne.s grap.noanipic
move.l curpic2,a2 ;normal pic ?
move.l curfrm2,d7
cmp.l #0,a2
beq.s grap.nodplpic
grap.noanipic
add.l d6,a0
add.w d6,d6
bsr.s grappln ;a2,d6,d7,d0
grap.nodplpic
movem.l (sp)+,d0-d7/a0-a6
add.w d6,d6
bra.s grap.nodpla
grap.nodpl ;geen dual playfield
cmp.w #8,d2 ;8 bitplanes ?
blt grap.no8planes
move.w #%10000,d2 ;only bit 4
bra grap.8planes
grap.no8planes
lsl.w #8,d2
lsl.w #4,d2
grap.8planes
move.w d2,2(a4) ;bplcon0
grap.nodpla
move.w d5,30(a1) ;modulo even
moveq.l #0,d3
add.w pic_vew(a2),d3 ;viewmode add
moveq.l #0,d2
move.w 2(a4),d2
or.l d3,d2
ifd gui
tst.b genlck
bne grap.genset
endc
or.l #$100,d2 ;genlock off ($302)
ifd gui
bra grap.gencont
grap.genset
or.l #$102,d2 ;genlock on ($302)
grap.gencont
endc
move.w d2,2(a4)
bsr.s grappln ;a2,d6,d7,d0
grap.end
movem.l (sp)+,d0-d7/a0-a6
rts
;sets on of the 2 possible pictures to the copper
;handles interlace
;d7=framenummer
;d6=copperliststap
;d0=raw planes positie
;a2=current picture
grappln ;planes invullen
movem.l d0-d7/a0-a6,-(sp)
lea pic_raw(a2),a1
move.l a1,d0 ;raw planes
moveq.l #0,d2 ;x*y
move.w pic_wid(a2),d2
lsr.l #1,d2 ;/2
moveq.l #0,d3
move.w pic_hgt(a2),d3
muls d3,d2
move.l d2,d4
add.l d2,d2
move.w pic_dpt(a2),d3
muls d3,d4 ;hele picture size
muls d7,d4 ;frame*size d7 !!!
add.l d4,d4
add.l d4,d0
move.l #vew_wid,d5 ;max x view
move.l hogscr,d4 ;max y view
move.w pic_vew(a2),d1 ;viewmode add
btst #2,d1
beq.s grappln.nolace
add.l d4,d4 ;max y view
grappln.nolace
btst #15,d1 ;hires ?
beq.s grappln.nohi
move.l #vew_wid*2,d5 ;max x view
bra.s grappln.noshi
grappln.nohi
btst #6,d1 ;super hires ?
beq.s grappln.noshi
move.l #vew_wid*4,d5 ;max x view
grappln.noshi
moveq.l #0,d3 ;scherm centreren
move.w pic_wid(a2),d3 ;pic breedte in bytes
cmp.w d5,d3 ;breder dan scherm ?
ble.s grappln.qa
sub.w d5,d3 ;-scherm breedte
lsr.w #2,d3 ;/4
add.l d3,d3
add.l d3,d0
grappln.qa
move.w pic_hgt(a2),d3 ;pic hoogte in bytes
cmp.w d4,d3 ;hoger dan scherm ?
ble.s grappln.qb
sub.w d4,d3 ;-scherm breedte
lsr.w #1,d3 ;/2
moveq.l #0,d5
move.w pic_wid(a2),d5 ;pic breedte in bytes
muls pic_dpt(a2),d5
muls d5,d3
add.l d3,d0
grappln.qb
moveq.l #0,d2
move.w pic_wid(a2),d2
move.w pic_vew(a2),d5 ;interlace flipping ?
btst #2,d5
beq.s grappln.nolac7b
move.w $04(a6),d5 ;even/oneven ?
btst #15,d5
beq.s grappln.nolac7b
moveq.l #0,d3
move.w pic_wid(a2),d3
muls pic_dpt(a2),d3
add.l d3,d0
grappln.nolac7b
move.w pic_dpt(a2),d1 ;plnnummer 1 halen
tst.w d1 ;0 planes ?
beq grappln.end
sub.w #1,d1
grappln.a
move.w d0,3*2(a0)
swap d0
move.w d0,1*2(a0)
swap d0
add.l d6,a0 ;d6=copper step !
add.l d2,d0
dbra d1,grappln.a
cmp.w #8,pic_dpt(a2) ;8 planes ?
bne grappln.noham8
btst #3,pic_vew(a2) ;ham ?
beq grappln.noham8
move.w -14(a0),d0 ;get 6
move.w -10(a0),d1
move.w -6(a0),d2 ;get 7
move.w -2(a0),d3
move.w -18(a0),-2(a0) ;5>7
move.w -22(a0),-6(a0) ;5>7
move.w -26(a0),-10(a0) ;4>6
move.w -30(a0),-14(a0) ;4>6
move.w -34(a0),-18(a0) ;3>5
move.w -38(a0),-22(a0) ;3>5
move.w -42(a0),-26(a0) ;2>4
move.w -46(a0),-30(a0) ;2>4
move.w -50(a0),-34(a0) ;1>3
move.w -54(a0),-38(a0) ;1>3
move.w -58(a0),-42(a0) ;0>2
move.w -62(a0),-46(a0) ;0>2
move.w d0,-62(a0) ;6>0
move.w d1,-58(a0) ;6>0
move.w d2,-54(a0) ;7>1
move.w d3,-50(a0) ;7>1
grappln.noham8
grappln.end
movem.l (sp)+,d0-d7/a0-a6
rts
;sets palettes to palette-buffer
grac
movem.l d0-d7/a0-a6,-(sp)
lea curpal1,a3 ;palette 1
move.l #palette,a1
bsr.s gracfrm
lea curpal2,a3 ;palette 2 (dpl)
move.l #16*4+palette,a1
bsr.s gracfrm
bsr palctr ;palette-buffer to copper
grac.end
movem.l (sp)+,d0-d7/a0-a6
rts
;moves palette from picture to palette-buffer
gracfrm
movem.l d0-d7/a0-a6,-(sp)
tst.l (a3) ;palette aanwezig ?
beq.s gracfrm.end
move.l (a3),a2 ;current palette
cmp.l #'PALE',(a2) ;palette ?
bne.s gracfrm.pict
lea 6(a2),a0 ;palette
move.w 4(a2),d0 ;aantal kleuren
bra.s gracfrm.col
gracfrm.pict
cmp.l #'ANIM',(a2) ;animatie ?
bne.s gracfrm.noanim
moveq.l #0,d1
move.w pic_ani(a2),d1
bclr #7,d1 ;behandelbit weghalen
moveq.l #0,d3
move.w pic_wid(a2),d3
lsr.w #1,d3 ;/2
muls pic_hgt(a2),d3
muls pic_dpt(a2),d3
add.l d3,d3
add.l #pic_raw,d3
move.l d3,d5
btst #0,d1
bne.s gracfrm.buf2
moveq.l #0,d5
gracfrm.buf2
add.l d5,a2
gracfrm.noanim
lea pic_pal(a2),a0 ;palette
move.w pic_palnum(a2),d0
tst.w d0 ;0 planes ?
beq.s gracfrm.end
gracfrm.col
gracfrm.fa
move.l (a0)+,(a1)+
dbra d0,gracfrm.fa
gracfrm.end
movem.l (sp)+,d0-d7/a0-a6
rts
;handles colorcycling in the palette-buffer
palcycctr
movem.l d0-d7/a0-a6,-(sp)
move.l curpic1,a2 ;current raw
cmp.l #0,a2
beq.s palcycctr.qb
lea cycdel1,a3 ;cycle delays
move.l #paltab,a4
bsr palcyc
palcycctr.qb
move.l curpic2,a2 ;current raw
cmp.l #0,a2
beq.s palcycctr.c
lea cycdel2,a3 ;cycle delays
move.l #16*2+paltab,a4
bsr palcyc
palcycctr.c
movem.l (sp)+,d0-d7/a0-a6
rts
;copies palette-buffer to copper
palctr
movem.l d0-d7/a0-a6,-(sp)
lea gracprcol,a1 ;AGA
move.l #palette,a0
move.l #paltab,a2
move.w #8-1,d6
palctr.e
move.w #32-1,d7
palctr.d
move.w (a2)+,d0 ;get cycle-position
move.w (a0,d0),6(a1) ;high RGB bits
move.w 2(a0,d0),((32+1)*4)+6(a1) ;low RGB bits
add.l #4,a1
dbra d7,palctr.d
add.l #((32+2)*4),a1
dbra d6,palctr.e
palctr.end
movem.l (sp)+,d0-d7/a0-a6
rts
;reset palette tabel, for proper color cycling
paltabres
movem.l d0-d7/a0-a6,-(sp)
lea paltab,a0
clr.l d0
move.w #256-1,d1
paltabres.a
move.w d0,(a0)+
add.w #4,d0 ;aga color words, high RGB + low RGB
dbra d1,paltabres.a
paltabres.end
movem.l (sp)+,d0-d7/a0-a6
rts
;colorcyclinghandling of a palette
palcyc
movem.l d0-d7/a0-a6,-(sp)
move.w #4-1,d7 ;4 cycles
palcyc.d
tst.w (a3)+ ;delay klaar ?
bne.s palcyc.c
moveq.l #0,d1
move.b pic_cycstr(a2),d1 ;start color
lsl.b #1,d1 ;*2
moveq.l #0,d2
move.b pic_cycend(a2),d2 ;end color
lsl.b #1,d2 ;*2
moveq.l #0,d3
move.b pic_cycadd(a2),d3 ;richting
move.l a4,a0 ;palette pointer
move.l a0,a1
add.l d1,a0 ;startcolor
add.l d2,a1 ;endcolor
cmp.b #1,d3 ;omhoog
beq.s palcyc.up
cmp.b #3,d3 ;omlaag
beq.s palcyc.down
bra.s palcyc.i
palcyc.up ;kleuren copieren
move.w (a1),d4 ;laatst color bewaren
palcyc.f ;kleuren copieren
cmp.l a0,a1
beq.s palcyc.fa
move.w -(a1),2(a1)
bra.s palcyc.f
palcyc.fa
move.w d4,(a1)
bra.s palcyc.g
palcyc.down
move.w (a0),d4 ;laatst color bewaren
palcyc.h ;kleuren copieren
cmp.l a0,a1
beq.s palcyc.ha
move.w 2(a0),(a0)+
bra.s palcyc.h
palcyc.ha
move.w d4,(a1)
palcyc.g
move.b pic_cycspd(a2),-1(a3) ;delay zetten
bra.s palcyc.i
palcyc.c
sub.w #1,-2(a3) ;cycle delay aftellen
palcyc.i
add.l #4,a2 ;next cycle info
dbra d7,palcyc.d
palcyc.qb
movem.l (sp)+,d0-d7/a0-a6
rts
; SECTION variabelen,DATA_c
cnop 0,2
curtsk dc.l 0
tskpri dc.l 0
duplok dc.l 0
inttel dc.l 0
intdel dc.l 0
form dc.l 0
ifffil dc.l 0
intvbold dc.l 0
inttbeold dc.l 0
patpos dc.l 0
gfxlib dc.l 0
doslib dc.l 0
wbview dc.l 0
mt_data dc.l 0
memvid dc.l 0
oldcprlist dc.l 0
hogscr dc.l vew_hgt
inspos dc.l -1
anispd1 dc.w 1 ;nooit op 0 !
anispd2 dc.w 1
cnop 0,2
varclr.s ;start wissen
oldrot dc.l 0
curpic dc.l 0
curfrm dc.l 0
cycdel1 ds.w 4
cycdel2 ds.w 4
rotinf1 dc.w 0
rotinf2 dc.w 0
effspd dc.w 0
efflop dc.b 0
anilop1 dc.b 0
anilop2 dc.b 0
anipal1 dc.b 0
anipal2 dc.b 0
rotdpl dc.b 1
rottrg dc.b 0
dplctr dc.b 0
cnop 0,2
insdat ds.l 4
inspri dc.l 0
instel dc.w 0
cureff dc.l 0
efftel dc.w 0
curpal1 dc.l 0
curpal2 dc.l 0
currot1 dc.l 0
currot2 dc.l 0
curpic1 dc.l 0
curpic2 dc.l 0
anitel1 dc.w 0
anitel2 dc.w 0
curfrm1 dc.l 0
curfrm2 dc.l 0
oldfrm1 dc.l 0
oldfrm2 dc.l 0
varclr.e
dc.l 0 ;wisruimte
varclr.ql equ varclr.e-varclr.s ;wislengte
ntscmode dc.b 0
end dc.b 0
pronam dc.b 'VideoTracker',0
cnop 0,2
dosnam dc.b 'dos.library',0
cnop 0,4
gfxnam dc.b 'graphics.library',0
cnop 0,4
cnop 0,4
gra.s ;copperlist edit buffer
gracprscr
dc.w $8e,$3381,$90,$81c1,$92,$003c,$94,$00d0
gracprbpl
dc.w $100,$0000,$102,$0000,$104,$0020
dc.w $108,$0000,$10a,$0000,$1fc,$0003
gracprpln
dc.w $e0,$0000,$e2,$0000 ;1
dc.w $e4,$0000,$e6,$0000 ;2
dc.w $e8,$0000,$ea,$0000 ;3
dc.w $ec,$0000,$ee,$0000 ;4
dc.w $f0,$0000,$f2,$0000 ;5
dc.w $f4,$0000,$f6,$0000 ;6
dc.w $f8,$0000,$fa,$0000 ;7
dc.w $fc,$0000,$fe,$0000 ;8
gracprcol
dc.w $106,$0000
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$0200
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$2000
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$2200
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$4000
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$4200
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$6000
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$6200
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$8000
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$8200
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$a000
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$a200
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$c000
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$c200
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$e000
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$e200
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$1000
cprjmp
dc.w $080,0,$082,0
gra.e
gra.ql equ gra.e-gra.s ;block lengte
cpr ;real copperlist
dc.w $0001,$fffe
dc.w $09c,$8001 ;tbeint
cprspr
dc.w $120,$0000,$122,$0000
dc.w $124,$0000,$126,$0000
dc.w $128,$0000,$12a,$0000
dc.w $12c,$0000,$12e,$0000
dc.w $130,$0000,$132,$0000
dc.w $134,$0000,$136,$0000
dc.w $138,$0000,$13a,$0000
dc.w $13c,$0000,$13e,$0000
cprbuf
dc.w $8e,$3381,$90,$81c1,$92,$003c,$94,$00d0
dc.w $100,$9000,$102,$0000,$104,$0020
dc.w $108,$0000,$10a,$0000,$1fc,$0003
dc.w $e0,$0000,$e2,$0000 ;0
dc.w $e4,$0000,$e6,$0000 ;1
dc.w $e8,$0000,$ea,$0000 ;2
dc.w $ec,$0000,$ee,$0000 ;3
dc.w $f0,$0000,$f2,$0000 ;4
dc.w $f4,$0000,$f6,$0000 ;5
dc.w $f8,$0000,$fa,$0000 ;6
dc.w $fc,$0000,$fe,$0000 ;7
dc.w $106,$0000
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$0200
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$2000
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$2200
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$4000
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$4200
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$6000
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$6200
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$8000
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$8200
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$a000
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$a200
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$c000
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$c200
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$e000
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$e200
dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
dc.w $106,$1000
dc.w $080,0,$082,0
cprbuf.e
dc.w $088,$0000 ;copjmp2
dc.w $080,0,$082,0 ;moet achter cprbck blijven !
cprbck
sprdat
dc.w $ffff,$fffe
palette ds.l 256 ;palette 24-bits, far out !
paltab ds.w 256 ;palette cycle-tabel
cnop 0,2
var ds.b $300 ;variabelen voor routines
; SECTION 10,CODE_C
endc
; this is the routine-source
;**********************************************************************
;Test_Vec
;mx68882 ;gebruik 68882 routine
;copperspeed ;gebruik copperbar om snelheid te meten
;Nodraw ;tekent geen lijnen om snelheid beter te meten
; mc68882
; machine 68882 ;in devpac 3: Machine 68882 dacht ik...
;Ik heb dit met maxxon gemaakt...
; assembleren met devpac, dan met hunkwizard of zoiets
; absoluut maken naar bijv. $80000 om de hunks enzo
; weg te halen, het eerste lonword moet "ROUT" zijn
; uiteindelijk, kijk uit dat hij volledig position-
; independent blijft (geeft devpac aan en hw ook)
;hier staan de picture-tabel offsets,begint met
;longword "PICT"
;vew_wid equ 44
;vew_hgt equ 290
;pic_wid equ 4 ;width in bytes
;pic_hgt equ 6 ;hoogte in lijnen
;pic_dpt equ 8 ;number of planes
;pic_ani equ 10 ;aantal frames (anim)
;pic_vew equ 12 ;viewmode (bplcon0)
;4 cycles mogelijk (deluxe paint)
;pic_cycstr equ 14 ;cycle start (*4)
;pic_cycend equ 15 ;cycle end (*4)
;pic_cycspd equ 16 ;cycle speed (*4)
;pic_cycadd equ 17 ;cycle add (*4)
;pic_palnum equ 30 ;aantal kleuren -1 (dbra)
;pic_pal equ 32 ;palette start
;pic_palsiz equ 256*2 ;vaste palette size
;256 kleuren mogelijk
;pic_raw equ pic_pal+pic_palsiz ;raw planes start
;zo opgebouwd:
;plane 0 row 0
;plane 1 row 0
;plane 2 row 0
;plane 0 row 1
;plane 1 row 1
;plane 2 row 1
;voor snellere blits
;dit is de vector-tabel, imagine en rot3d worden
;in vt omgezet naar een eigen vector-tabel
;ik heb een losse voorbeeld.bin erbij gepacked
;begint met "VECT"
ifnd ocs
vec_xyzlen equ $4 ;lengte xyzc tabel
vec_pollen equ $8 ;lengte polygoon tabel
vec_faclen equ $c ;lengte face tabel
vec_palnum equ $10 ;aantal kleuren
vec_pal equ $12 ;palette
vec_xyz equ 256*4+vec_pal ;start xyzc tabel
vec_xyznum equ vec_xyz ;aantal xyzc's
vec_len equ vec_xyz+4 ;minimale lengte
endc
ifd ocs
vec_siz equ vew_hgt ;vergroting
vec_xyzlen equ $4 ;lengte xyzc tabel
;xyzc tabel:
;aantal xyzc's -1 word
;x,y,z coordinaten en c (kleur) in words
vec_pollen equ $8 ;lengte polygoon tabel
;polygonen tabel: (uit mijn hoofd, bugvrij ?)
;aantal poly's -1 word
;poly 1 aantal lijnen -1 word
;poly 1 lijn 1 xyzc 1 xyzc 2 word,word,xyzc-tabel nummer
;poly 1 lijn 2 xyzc 1 xyzc 2 word,word
;etc.
vec_palnum equ $10 ;aantal kleuren -1 (dbra)
vec_pal equ $12 ;palette in words (256)
vec_xyz equ 256*2+vec_pal ;start xyzc tabel
vec_xyznum equ vec_xyz ;aantal xyzc's
endc
;de variabelen-tabel, geeft nuttige informatie
;voor de routines
;de huidige tabel bevat meer info maar dat heeft de
;vectorroutine toch niet nodig
;var_gfxlib equ $000 ;graphics lib
;var_pic equ $004 ;current picture 1
;var_anispd1 equ $008 ;animspeed
;var_anitel1 equ $00c ;animspeed
;var_cprbck equ $010 ;copperback
;var_bck equ $014 ;background
;var_ntsc equ $01c ;frequency
;var_txt1 equ $040 ;text
;var_txt16 equ 15*4+var_txt1
;var_fon1 equ $0c0 ;fonts
;var_fon16 equ 15*4+var_fon1
;var_vec1 equ $080 ;vectors
;var_vec64 equ 63*4+var_vec1
;var_obj1 equ $180 ;objects
;var_obj64 equ 63*4+var_obj1
rot_vewh equ 0;$8000 ;bplcon0 width-mode low-res/hi-res
rot_vewl equ 0;$4 ;bplcon0 heigth-mode no-lace/interlace
rot_vew equ rot_vewh+rot_vewl
rot_dpt equ 1 ;aantal planes (depth)
;shade ;als dit label aan staat, is het de vectorshade routine
;(1 plane,6 buffers,copperlijst)
ifeq rot_vewh-0
ifeq rot_dpt-1
rot_blit equ 1 ;aantal clear blits
endc
ifeq rot_dpt-2
rot_blit equ 1 ;aantal clear blits
endc
ifeq rot_dpt-3
rot_blit equ 1 ;aantal clear blits
endc
ifeq rot_dpt-4
rot_blit equ 2 ;aantal clear blits
endc
ifeq rot_dpt-5
rot_blit equ 2 ;aantal clear blits
endc
ifeq rot_dpt-6
rot_blit equ 2 ;aantal clear blits
endc
endc
ifeq rot_vewh-$8000
ifeq rot_dpt-1
rot_blit equ 1 ;aantal clear blits
endc
ifeq rot_dpt-2
rot_blit equ 2 ;aantal clear blits
endc
ifeq rot_dpt-3
rot_blit equ 2 ;aantal clear blits
endc
ifeq rot_dpt-4
rot_blit equ 3 ;aantal clear blits
endc
endc
ifeq rot_vewh-0
bck_wid equ vew_wid ;view width
rot_wid equ (384/8) ;breedte planes
rot_drot equ 256 ;max. grote vectorobj
ifd ocs
rot_cen equ 0
endc
ifnd ocs
rot_cen equ 8
endc
endc
ifeq rot_vewh-$8000
bck_wid equ vew_wid*2
rot_wid equ (384/8)*2
rot_drot equ 256*2
ifd ocs
rot_cen equ 8
endc
ifnd ocs
rot_cen equ 0
endc
endc
ifeq rot_vewl-$0
bck_hgt equ vew_hgt ;viewable hoogte
rot_hgt equ 384 ;hoogte planes
endc
ifeq rot_vewl-$4
bck_hgt equ vew_hgt*2
rot_hgt equ 384*2
endc
; a0=variabelen tabel (adres tabel)
; d0=routinfo (routinemode-waarde)
SECTION 3,CODE
cnop 0,8
rot
rotp
ifnd ocs
dc.l 'ROTA' ;effect-longword-ID
endc
ifd ocs
dc.l 'ROTO' ;effect-longword-ID
endc
movem.l d2-d7/a1-a6,-(sp)
lea rot,a6 ;a6 prog base (zorgt ervoor
;dat deze routine overal
;in het geheugen kan staan)
ifd rout
move.l #rotc,a2
endc
move.l a2,rotchp-rot(a6)
lea ($dff000).l,a5 ;a5 gebruikt ik in de hele file
ifd shade
move.l rotchp-rot(a6),a1
add.l #rotcop-rotc,a1 ;copperback invullen
move.l var_cprbck(a0),d1 ;copperlist terugjump
sub.l #8,d1 ;adres naar vt-copperlist
move.w d1,6(a1)
swap d1
move.w d1,2(a1)
endc
ifnd shade
move.l rotchp-rot(a6),a3
add.l #rotpal1-rotc,a3 ;palette van zichtbare
move.l a3,a4 ;buffer naar werkbuffer
move.l real-rot(a6),d1
add.l d1,a3 ;destination
eor.l #rotpic_l,d1
add.l d1,a4 ;source
move.w #1,d1
lsl.w #rot_dpt,d1
sub.w #1,d1
rotpalcop.c ;palette
ifd ocs
move.w (a4)+,(a3)+
endc
ifnd ocs
move.l (a4)+,(a3)+
endc
dbra d1,rotpalcop.c
endc
lea var_obj1(a0),a2 ;copy current balls
lea rotbaltab-rot(a6),a1
move.w #16-1,d1
rotbal.cop
move.l (a2)+,(a1)+
dbra d1,rotbal.cop
tst.l var_vec1(a0) ;nieuwe vector ?
beq.s rot.novec
move.l var_vec1(a0),a1 ;halen
clr.l var_vec1(a0) ;wissen
cmp.l curvec-rot(a6),a1 ;zelfde ?
beq.s rot.novec ;palette niet copieren
move.l a1,curvec-rot(a6) ;current vector
ifnd shade
move.w vec_palnum(a1),d1
cmp.w #-1,d1 ;geen kleuren ?
beq.s rot.novec
move.w #1,d2 ;maximale color check
lsl.w #rot_dpt,d2
sub.w #1,d2
cmp.w d2,d1
ble.s rotpalcop.a
move.w d2,d1
rotpalcop.a ;vector palette copieren
lea vec_pal(a1),a2
move.l rotchp-rot(a6),a3
add.l #rotpal1-rotc,a3
add.l real-rot(a6),a3 ;get current workbuffer
rotpalcop.bx
ifd ocs
move.w (a2)+,(a3)+
endc
ifnd ocs
move.l (a2)+,(a3)+
endc
dbra d1,rotpalcop.bx
endc
rot.novec
tst.l curvec-rot(a6) ;vector aanwezig ?
beq rot.end
move.l curvec-rot(a6),a1
cmp.l #'VECT',(a1) ;file nog actueel ?
bne rot.end
clr.l d1 ;info ombouwen
move.l d0,d1
divs #8192,d1
and.l #$ffff,d1
tst.b d1
beq.s rot.norotclr
clr.w XROT-rot(a6) ;xyz clear
clr.w YROT-rot(a6)
clr.w ZROT-rot(a6)
rot.norotclr
muls #8192,d1
sub.l d1,d0
move.l d0,d1
divs #4096,d1
and.l #$ffff,d1
move.b d1,clrmod-rot(a6) ;clear on/off
muls #4096,d1
sub.l d1,d0
move.l d0,d1
divs #2048,d1
and.l #$ffff,d1
move.b d1,bufmod-rot(a6) ;double buffer on/off
muls #2048,d1
sub.l d1,d0
move.l d0,d1
divs #128,d1
and.l #$ffff,d1
move.l d1,d7
add.l #1,d7
muls #2,d7 ;d7 snelheid (add)
muls #128,d1
sub.l d1,d0
move.w d0,d1
divs #64,d1
and.l #$ffff,d1
move.w d1,d3 ;d3 richting (d mov)
muls #64,d1
sub.w d1,d0
move.w d0,d1
divs #8,d1
and.l #$ffff,d1
move.w d1,d2 ;d2 type line/pix/ball
muls #8,d1
sub.w d1,d0
move.w d0,d1
divs #4,d1
and.l #$ffff,d1
move.w d1,d6 ;d6 x rot
muls #4,d1
sub.w d1,d0
move.w d0,d1
divs #2,d1
and.l #$ffff,d1
move.w d1,d5 ;d5 y rot
muls #2,d1
sub.w d1,d0
move.w d0,d4 ;d4 z rot
muls d7,d6
muls d7,d5
muls d7,d4
move.w d6,xadd-rot(a6)
move.w d5,yadd-rot(a6)
move.w d4,zadd-rot(a6)
move.w d3,dway-rot(a6)
move.w d7,dadd-rot(a6)
tst.b clrmod-rot(a6) ;clear off ?
bne.s rot.noclear
movem.l d0-d7/a0-a6,-(sp) ;clear screen
move.l rotchp-rot(a6),a3
add.l #rotpln1-rotc,a3 ;plane + centreren
add.l #((rot_hgt-bck_hgt)/2*rot_wid*rot_dpt)+((rot_wid-bck_wid)/4*2),a3
add.l real-rot(a6),a3
move.w #0,$042(a5)
move.w #$100+$f0,$040(a5)
move.w #rot_wid-bck_wid,$064(a5)
move.w #rot_wid-bck_wid,$066(a5)
move.w #0,$074(a5) ;a dat
move.l #0,$044(a5) ;mask
move.w #rot_blit-1,d0
rot.blit1
move.l a3,$054(a5) ;destination
move.w #((bck_hgt/rot_blit)*rot_dpt)*64+(bck_wid/2),$058(a5)
bsr rot.wblit
add.l #(bck_hgt/rot_blit)*rot_dpt*rot_wid,a3
dbra d0,rot.blit1
movem.l (sp)+,d0-d7/a0-a6
rot.noclear
tst.b d2
bne.s rot.typa
bsr VECTOR ;calc coords
bsr rot.pxl ;pixel
bra.s rot.typend
rot.typa
cmp.b #1,d2
bne.s rot.typb
bsr VECTOR ;calc coords
bsr rotlin ;lijnen
bra.s rot.typend
rot.typb
cmp.b #2,d2
bne.s rot.typc
bsr VECTOR ;calc coords
bsr rotgls ;glas
bra.s rot.typend
rot.typc
cmp.b #3,d2
bne.s rot.typd
bsr VECTOR ;calc coords
bsr rotfil ;solide
bra.s rot.typend
rot.typd
cmp.b #4,d2
bne.s rot.type
bsr VECTOR ;calc coords
bsr rot.bal ;ballen
bra.s rot.typend
rot.type
cmp.b #5,d2
bne.s rot.typf
bsr VECTOR ;calc coords
bsr rotsym ;symetrisch solide
bra rot.typend
rot.typf
rot.typend
move.w xadd-rot(a6),d0
move.w yadd-rot(a6),d1
move.w zadd-rot(a6),d2
move.w dadd-rot(a6),d3
move.w dway-rot(a6),d4
add.w d0,XROT-rot(a6) ;hoek draaing
add.w d1,YROT-rot(a6)
add.w d2,ZROT-rot(a6)
btst #0,d4
bne.s rot.px
add.w d3,DROT-rot(a6)
bra.s rot.q
rot.px
sub.w d3,DROT-rot(a6)
rot.q
cmp.w #718,XROT-rot(a6) ;vergelijkingen
ble.s NOP1
sub.w #718,XROT-rot(a6)
NOP1: cmp.w #718,YROT-rot(a6)
ble.s NOP2
sub.w #718,YROT-rot(a6)
NOP2:
cmp.w #718,ZROT-rot(a6)
ble.s NOP3
sub.w #718,ZROT-rot(a6)
NOP3:
cmp.w #rot_drot,DROT-rot(a6)
ble.s NOP4
move.w #rot_drot,DROT-rot(a6)
NOP4
cmp.w #0,DROT-rot(a6)
bge.s NOP5
move.w #0,DROT-rot(a6)
NOP5
GETMEOUT:
rot.end
clr.l d1
ifd shade
move.l rotchp-rot(a6),a1
add.l #rotcop-rotc,a1
move.l a1,d1 ;copperlist
move.l rotchp-rot(a6),a2
add.l #rotpic1-rotc,a2 ;raw rotplanes
move.l real-rot(a6),d2
move.w #4-1,d4
rotend.kb
sub.l #rotpic_l,d2
cmp.l #0-rotpic_l,d2
bne rotend.ka
move.l #5*rotpic_l,d2
rotend.ka
move.l a2,d3
add.l d2,d3
move.l #((rot_hgt-vew_hgt)/2*rot_wid*rot_dpt)+((rot_wid-vew_wid)/2)+rotinf_l,d6
cmp.b #50,var_ntsc(a0)
beq rotend.pal
move.l #((rot_hgt-(vew_hgt-56))/2*rot_wid*rot_dpt)+((rot_wid-vew_wid)/2)+rotinf_l,d6
rotend.pal
add.l d6,d3
move.w d3,$e(a1)
swap d3
move.w d3,$a(a1)
add.l #8,a1
dbra d4,rotend.kb
endc
move.l rotchp-rot(a6),a0
add.l #rotpic1-rotc,a0 ;raw rotplanes
move.l real-rot(a6),d0 ;get scherm 2
tst.b bufmod-rot(a6) ;buffer on/off
bne.s rot.end2
ifnd shade
eor.l #rotpic_l,real-rot(a6) ;real=scherm 2
endc
ifd shade
move.l real-rot(a6),d2
add.l #rotpic_l,d2
cmp.l #6*rotpic_l,d2
bne rotend.k
clr.l d2
rotend.k
move.l d2,real-rot(a6)
endc
rot.end2
add.l d0,a0
movem.l (sp)+,d2-d7/a1-a6
rts
rot.wblit
btst #6,$002(a5)
bne rot.wblit
rts
rot.bal
movem.l d0-d7/a0-a6,-(sp)
move.w #%1111111111111111,$044(a5)
move.w #%1111111111111111,$046(a5)
move.l rotbaltab-rot(a6),a1
cmp.l rotpal-rot(a6),a1 ;nieuwe bal ?
beq.s rot.bala
move.l a1,rotpal-rot(a6) ;en opslaan
ifnd shade
cmp.w #rot_dpt,pic_dpt(a1) ;depth hetzelfde ?
bne.s rot.bala
move.w pic_palnum(a1),d0
lea pic_pal(a1),a1
move.l rotchp-rot(a6),a2
add.l #rotpal1-rotc,a2
add.l real-rot(a6),a2
rot.balpal
ifd ocs
move.w (a1)+,(a2)+
endc
ifnd ocs
move.l (a1)+,(a2)+
endc
dbra d0,rot.balpal
endc
rot.bala
clr.l d0
clr.l d1
clr.l d2
clr.l d3
clr.l d4
rot.balb
move.l curvec-rot(a6),a4
add.l #vec_xyz,a4 ;info overslaan
lea xy,a2
move.l #$7fff,d5
move.w (a4)+,d7 ;aantal xyZ's-1 vanwege DBF_commando
rot.zaadbal
move.w 4(a2),d3 ;z
beq.s rot.zaadbala ;0 ?
cmp.w d5,d3 ;groter ?
bgt.s rot.zaadbala
move.w d3,d5 ;kleinste z bewaren
move.l a2,a3 ;xyz posiite bewaren
move.l a4,a1 ;kleur positie bewaren
rot.zaadbala
lea 6(a2),a2
lea 8(a4),a4
dbra d7,rot.zaadbal
cmp.w #$7fff,d5 ;klaar ?
beq.s rot.balend
moveq.l #0,d4
move.w 6(a1),d4 ;kleur
add.w d4,d4
add.w d4,d4 ;*4
movem.w (a3),d0/d1/d3 ;x,y,z
bsr.s rotobj ;a0,d0,d1,d4
clr.w 4(a3) ;z wissen
bra rot.balb
rot.balend
movem.l (sp)+,d0-d7/a0-a6
rts
rotobj ;d3
movem.l d0-d7/a0-a6,-(sp)
lea rotbaltab,a0
add.l d4,a0
tst.l (a0) ;ball file ?
beq rotobj.end
move.l (a0),a0
cmp.l #'OBJE',(a0) ;nog levend ?
bne rotobj.end
cmp.w #rot_dpt,pic_dpt(a0) ;depth hetzelfde ?
bne rotobj.end
move.l real-rot(a6),d6 ;get scherm 2
move.l rotchp-rot(a6),a1
add.l #rotpln1-rotc,a1
add.l d6,a1
clr.l d2 ;centreer x
move.w pic_wid(a0),d2
sub.l #2,d2 ;-blitterscrollruimte
lsl.l #2,d2 ;*8/2
sub.l d2,d0
clr.l d2 ;centreer y
move.w pic_hgt(a0),d2
lsr.l #1,d2 ;/2
sub.l d2,d1
move.l d0,d2
lsr.l #4,d0 ;ruwe xpos
lsl.l #1,d0
add.l d0,a1
muls #rot_wid*rot_dpt,d1 ;ypos
add.l d1,a1
clr.l d6
move.w pic_wid(a0),d6 ;bltsize berekenen
lsr.w #1,d6 ;/2
clr.l d5
move.w pic_hgt(a0),d5
muls pic_dpt(a0),d5
lsl.w #6,d5 ;*64 voor bltsize
add.w d5,d6
lsl.l #3,d0 ;bitscroll verder bereken
sub.l d0,d2
lsl.w #8,d2
lsl.w #4,d2
move.w d2,$42(a5) ;bltcon1
add.w #$0fca,d2
move.w d2,$40(a5) ;bltcon0
rotobj.da
clr.l d5
move.w pic_ani(a0),d5 ;aantal brushes
move.l #256,d4 ;maximale z !
divs d5,d4
and.l #$ffff,d4
and.l #$ffff,d3
divs d4,d3
and.l #$ffff,d3
clr.l d5
move.w pic_wid(a0),d5 ;breedte
muls pic_hgt(a0),d5 ;hoogte
muls pic_dpt(a0),d5 ;plnnumes
move.l d5,d7
add.l d5,d5 ;plus mask
muls d3,d5 ;anipos
lea pic_raw(a0),a4 ;obj picture
add.l d5,a4
move.l a4,a3
add.l d7,a3 ;obj mask
move.l #rot_wid,d7
sub.w pic_wid(a0),d7
move.w d7,$60(a5) ;bltcmod
move.w d7,$66(a5) ;bltdmod
move.w #0,$62(a5) ;bltbmod
move.w #0,$64(a5) ;bltamod
clr.l d3
move.w pic_dpt(a0),d3 ;bck opslaan
rotobj.a
move.l a1,$48(a5) ;bltcpt destination
move.l a4,$4c(a5) ;bltbpt picture
move.l a3,$50(a5) ;bltapt mask
move.l a1,$54(a5) ;bltdpt destination
move.w d6,$58(a5) ;bltsize
bsr rot.wblit
rotobj.bx
rotobj.end
movem.l (sp)+,d0-d7/a0-a6
rts
rot.pxl ;pixels zetten
movem.l d0-d7/a0-a6,-(sp)
clr.l d0
clr.l d1
clr.l d3
clr.l d4
lea xy,a2
move.l #rot_wid,d6
move.l #rot_wid*rot_dpt,d5 ;y
move.l #7,d4 ;x bit 8
move.l curvec-rot(a6),a1
add.l #vec_xyz,a1
move.w (a1)+,d7 ;aantal xyZ's-1 vanwege DBF_commando
move.l rotchp-rot(a6),a0
add.l #rotpln1-rotc,a0
add.l real-rot(a6),a0 ;get scherm 2
add.l #(rot_dpt-1)*rot_wid,a0
move.l a0,a3
rot.pxla
ifeq 1-rot_dpt
movem.w (a2)+,d0-d1/d3 ;xyz
; muls d5,d1 ;y
ifeq rot_wid-(384/8*2) ;*96
lsl.w #5,d1 ;*32
move.w d1,d3
add.w d1,d1 ;*2
add.w d3,d1
endc
ifeq rot_wid-(384/8) ;*48
lsl.w #4,d1 ;*16
move.w d1,d3
add.w d1,d1 ;*2
add.w d3,d1
endc
move.w d0,d2
lsr.w #3,d2 ;/8
add.w d2,d1
move.w d4,d2
and.w d4,d0 ;x bit 8
sub.w d0,d2
move.l a3,a0
add.l d1,a0
bset d2,(a0)
dbra d7,rot.pxla
endc
iflt 1-rot_dpt
movem.w (a2)+,d0-d1/d3 ;xyz
move.w 6(a1),d3 ;kleur
add.l #8,a1
muls d5,d1 ;y
move.w d0,d2
lsr.w #3,d2 ;/8
add.w d2,d1
move.w d4,d2
and.w d4,d0 ;x bit 8
sub.w d0,d2
move.l a3,a0
add.l d1,a0
move.w #rot_dpt-1,d0
rot.pxlb
btst d0,d3
beq rot.pxlc
bset d2,(a0)
rot.pxlc
sub.l d6,a0
dbra d0,rot.pxlb
dbra d7,rot.pxla
rot.pxlx
endc
movem.l (sp)+,d0-d7/a0-a6
rts
;DRAWLINE-ROUTINE
;d0 = x1
;d1 = y1
;d2 = x2
;d3 = y2
;uses d0-d6
rotlin ;lijntjes trekken, joepie !
movem.l d0-d7/a0-a6,-(sp)
move.l curvec-rot(a6),a1
add.l 4(a1),a1
add.l #vec_xyz,a1 ;info overslaan
lea xy,a2
clr.l d4
move.w (a1)+,d6 ;aantal poly's
cmp.w #-1,d6 ;geen ?
beq.s rotlin.end
rotlin.a
move.w (a1)+,d7 ;aantal lijnen
lea 2(a1),a1 ;kleur overslaan
rotlin.bx
move.w (a1)+,d4
subq.w #1,d4
muls #6,d4
movem.w (a2,d4.w),d0-d1
move.w (a1)+,d4
subq.w #1,d4
muls #6,d4
movem.w (a2,d4.w),d2-d3
bsr DRAWLINE ;lijn tekenen
dbra d7,rotlin.bx
; lea 2(a1),a1
dbra d6,rotlin.a
rotlin.end
movem.l (sp)+,d0-d7/a0-a6
rts
rotfil ;solid poly's
movem.l d0-d7/a0-a6,-(sp)
bsr line_init1 ;eventueel tabel vullen
lea xy,a2
bsr rotsor ;poly's sorteren
cmp.w #-1,d1 ;geen ?
beq rotfil.end
move.w d1,d3 ;aantal polies
move.w d1,d4 ;aantal polies
rotfil.fa
lea rotdontab,a4 ;done tabel
sub.l a1,a1
move.w #$7fff,d6 ;maximale z positie
move.w d3,d2 ;aantal poly's
rotfil.ca
move.w 4(a4),d0 ;poly z
beq.s rotfil.aa ;leeg ?
cmp.w d6,d0 ;z positie groter ?
bge.s rotfil.aa
move.l a4,a1
move.w d0,d6
rotfil.aa
lea 6(a4),a4
dbra d2,rotfil.ca
cmp.l #0,a1
beq rotfil.end ;voortijdige ejaculatie
clr.w 4(a1) ;poly wissen
movem.l d0-d7/a0-a6,-(sp)
move.l (a1),a1 ;poly halen
move.w (a1)+,d7 ;aantal lijnen
move.w (a1)+,a0 ;kleur
moveq.l #0,d0
moveq.l #0,d1
moveq.l #0,d2
moveq.l #0,d3
move.l #$7fff,d4 ;minimale x
move.l #$7fff,d5 ;minimale y
sub.l a3,a3 ;maximale x
sub.l a4,a4 ;maximale y
rotfil.bx
move.w (a1)+,d2
subq.w #1,d2
muls #6,d2
movem.w (a2,d2.w),d0-d1 ;x1,y1
move.w (a1)+,d2
subq.w #1,d2
muls #6,d2
movem.w (a2,d2.w),d2-d3 ;x2,y2
bsr line ;lijn tekenen
cmp.w d4,d0 ;minimale x halen
bge.s rotfil.ba
move.w d0,d4
rotfil.ba
cmp.w d4,d2
bge.s rotfil.bb
move.w d2,d4
rotfil.bb
cmp.w d5,d1 ;minimale y halen
bge.s rotfil.bc
move.w d1,d5
rotfil.bc
cmp.w d5,d3
bge.s rotfil.bd
move.w d3,d5
rotfil.bd
move.l a3,d6
cmp.w d6,d0 ;maximale x halen
ble.s rotfil.be
move.w d0,a3
rotfil.be
cmp.w d6,d2
ble.s rotfil.bf
move.w d2,a3
rotfil.bf
move.l a4,d6
cmp.w d6,d1 ;maximale y halen
ble.s rotfil.bg
move.w d1,a4
rotfil.bg
cmp.w d6,d3
ble.s rotfil.bh
move.w d3,a4
rotfil.bh
dbra d7,rotfil.bx
bsr rotpolfil
rotfil.noline
movem.l (sp)+,d0-d7/a0-a6
rotfil.ea
dbra d4,rotfil.fa
rotfil.end
movem.l (sp)+,d0-d7/a0-a6
rts
rotsym ;solid lines
movem.l d0-d7/a0-a6,-(sp)
bsr line_init1 ;eventueel tabel vullen
lea xy,a2
bsr rotsor ;poly's sorteren d1=aantal
cmp.w #-1,d1 ;geen ?
beq rotsym.end
move.w d1,d3 ;aantal polies
add.w #2,d1
lsr.w #1,d1 ;/2
sub.w #1,d1
tst.w d1
beq.s rotsym.plot ;maar 1 poly !
move.w d1,d4 ;aantal te wissen polies
rotsym.f
lea rotdontab,a4 ;done tabel
move.w #$7fff,d6 ;maximale z positie
move.w d3,d2 ;aantal poly's
rotsym.c
move.w 4(a4),d0 ;poly z
beq.s rotsym.a ;leeg ?
cmp.w d6,d0 ;z positie groter ?
bgt.s rotsym.a
move.l a4,a1
move.w d0,d6
rotsym.a
lea 6(a4),a4
dbra d2,rotsym.c
clr.w 4(a1) ;poly wissen
rotsym.e
dbra d4,rotsym.f
rotsym.plot
move.w d3,d4 ;aantal polies
sub.w d1,d4 ;- aantal te wissen polies
rotsym.fa
lea rotdontab,a4 ;done tabel
sub.l a1,a1
move.w #$7fff,d6 ;maximale z positie
move.w d3,d2 ;aantal poly's
rotsym.ca
move.w 4(a4),d0 ;poly z
beq.s rotsym.aa ;leeg ?
cmp.w d6,d0 ;z positie groter ?
bge.s rotsym.aa
move.l a4,a1
move.w d0,d6
rotsym.aa
lea 6(a4),a4
dbra d2,rotsym.ca
cmp.l #0,a1
beq rotsym.end ;voortijdige ejaculatie
clr.w 4(a1) ;poly wissen
movem.l d0-d7/a0-a6,-(sp)
move.l (a1),a1 ;poly halen
move.w (a1)+,d7 ;aantal lijnen
move.w (a1)+,a0 ;kleur
moveq.l #0,d0
moveq.l #0,d1
moveq.l #0,d2
moveq.l #0,d3
move.l #$7fff,d4 ;minimale x
move.l #$7fff,d5 ;minimale y
sub.l a3,a3 ;maximale x
sub.l a4,a4 ;maximale y
rotsym.bx
move.w (a1)+,d2
subq.w #1,d2
muls #6,d2
movem.w (a2,d2.w),d0-d1 ;x1,y1
move.w (a1)+,d2
subq.w #1,d2
muls #6,d2
movem.w (a2,d2.w),d2-d3 ;x2,y2
bsr line ;lijn tekenen
cmp.w d4,d0 ;minimale x halen
bge.s rotsym.ba
move.w d0,d4
rotsym.ba
cmp.w d4,d2
bge.s rotsym.bb
move.w d2,d4
rotsym.bb
cmp.w d5,d1 ;minimale y halen
bge.s rotsym.bc
move.w d1,d5
rotsym.bc
cmp.w d5,d3
bge.s rotsym.bd
move.w d3,d5
rotsym.bd
move.l a3,d6
cmp.w d6,d0 ;maximale x halen
ble.s rotsym.be
move.w d0,a3
rotsym.be
cmp.w d6,d2
ble.s rotsym.bf
move.w d2,a3
rotsym.bf
move.l a4,d6
cmp.w d6,d1 ;maximale y halen
ble.s rotsym.bg
move.w d1,a4
rotsym.bg
cmp.w d6,d3
ble.s rotsym.bh
move.w d3,a4
rotsym.bh
dbra d7,rotsym.bx
bsr rotpolfil
rotsym.noline
movem.l (sp)+,d0-d7/a0-a6
rotsym.ea
dbra d4,rotsym.fa
rotsym.end
movem.l (sp)+,d0-d7/a0-a6
rts
rotsor ;polies sorteren
movem.l d2-d7/a0-a6,-(sp)
move.l curvec-rot(a6),a1
add.l 4(a1),a1
add.l #vec_xyz,a1 ;info overslaan
lea rotdontab,a4 ;done tabel wissen
moveq.l #0,d7
move.w (a1)+,d6 ;aantal polies
move.w d6,d1
cmp.w #-1,d1 ;geen ?
beq.s rotsor.end
rotsor.h
move.w (a1),d7 ;aantal lijnen
move.w d7,d3 ;aantal lijnen
add.w #1,d3
move.l a1,(a4)+ ;poly opslaan
lea 4(a1),a1 ;+kleur
moveq.l #0,d0 ;gemiddelde z positie
; moveq.l #0,d2
moveq.l #0,d4 ;gemiddelde z positie
rotsor.dx
move.w (a1)+,d2 ;coordinaat nummer
subq.w #1,d2
muls #6,d2
move.w 4(a2,d2.w),d4 ;z
lea 2(a1),a1 ;2de coordinaat overslaan
; cmp.w d2,d4
; ble rotsor.da
; move.w d4,d2
;rotsor.da
add.l d4,d0
dbra d7,rotsor.dx
; add.l d2,d0 ;+hoogste z-positie
divs d3,d0 ;/aantal lijnen
move.w d0,(a4)+ ;poly gem. z opslaan
; lea 2(a1),a1
dbra d6,rotsor.h
rotsor.g
rotsor.end
movem.l (sp)+,d2-d7/a0-a6
rts
rotpolfil ;d4/d5/a3/a4
movem.l d0-d7/a0-a6,-(sp)
move.l rotchp-rot(a6),a2
add.l #rotpln1-rotc,a2
move.l a2,a1
add.l #rotplnw-rotpln1,a1 ;workplane
add.l real-rot(a6),a2 ;get scherm 2
move.w #rot_wid,d7 ;wordt modulo
sub.w #16,d4 ;ruimte voor min x
add.w #16,a3 ;ruimte voor max x
; sub.w #2,d5 ;ruimte voor min y
add.w #1,a4 ;ruimte voor max y
move.w a4,d0 ;maximale y
sub.w d5,d0 ;-minimale y
move.w d0,d2 ;y hoogte (in lijnen)
lsl.w #6,d0 ;*64
move.w a3,d1 ;maximale x
sub.w d4,d1 ;-minimale x
lsr.w #4,d1 ;/16
move.w d1,d3 ;x breedte (in words)
add.w d1,d0 ;bltsize
muls #rot_wid,d5 ;minimale y
add.l d5,a1 ;+workplane
lsr.l #1,d5 ;/2 (voor hi-res)
muls #rot_dpt,d5 ;minimale y
lsl.l #1,d5 ;*2
add.l d5,a2 ;+destination scherm
lsr.w #4,d4 ;/16 minimale x
lsl.w #1,d4 ;*2 minimale x
add.l d4,a1 ;+workplane
add.l d4,a2 ;+destination scherm
muls #rot_wid,d2 ;y hoogte
lsl.w #1,d3 ;*2 x breedte
sub.w d3,d7 ;module aftrekken
add.l d3,d2
move.l a1,a3 ;workscherm bewaren
add.l d2,a1 ;reverse fill add
move.l a1,$4c(a5) ;bltbpt
move.l a1,$54(a5) ;bltdpt
move.w d7,$62(a5) ;bltbmod
move.w d7,$66(a5) ;bltdmod
move #%0000010111001100,$40(a5) ;bltcon0
move #%0000000000010010,$42(a5) ;bltcon1
move d0,$58(a5) ;bltsiz
bsr rot.wblit ;wait for blit
add.l #2,a3 ;reverse ?
add.l #2,a2 ;reverse ?
move.w #$f00+$ca,$040(a5) ;bltcon0
move.w #0,$042(a5) ;bltcon1
move.l #-1,$044(a5) ;mask
move.w d7,d6
add.w #rot_wid*(rot_dpt-1),d6
move.w d6,$60(a5) ;bltcmod
move.w d7,$62(a5) ;bltbmod
move.w d7,$64(a5) ;bltamod
move.w d6,$66(a5) ;bltdmod
move.w a0,d6 ;kleur halen
move.l a3,a4 ;empty positie
add.l #rotplne-rotplnw,a4
add.l #rot_wid*(rot_dpt-1),a2
move.w #rot_dpt-1,d1
rotpolfil.a
move.l a3,d2
btst d1,d6 ;kleurnbit test
; beq rotpolfil.bx ;doorschijnend
bne.s rotpolfil.c
move.l a4,d2 ;solid
rotpolfil.c
move.l a2,$48(a5) ;bltcpt destination
move.l d2,$4c(a5) ;bltbpt picture
move.l a3,$50(a5) ;bltapt mask
move.l a2,$54(a5) ;bltdpt destination
move.w d0,$58(a5)
bsr rot.wblit ;work > view
rotpolfil.bx
sub.l #rot_wid,a2
dbra d1,rotpolfil.a
move.w #0,$074(a5) ;a dat
move.l #0,$044(a5) ;mask
move.w #$100+$f0,$040(a5) ;bltcon0
move.w d7,$66(a5) ;bltdmod
move.l a3,$054(a5) ;destination
move.w d0,$58(a5)
bsr rot.wblit ;clr work
movem.l (sp)+,d0-d7/a0-a6
rts
rotgls ;solid lines
movem.l d0-d7/a0-a6,-(sp)
bsr line_init1 ;eventueel tabel vullen
move.l curvec-rot(a6),a1
add.l 4(a1),a1
add.l #vec_xyz,a1 ;info overslaan
move.w (a1)+,d6 ;aantal polies
cmp.w #-1,d6 ;geen ?
beq rotgls.end
lea xy,a2
rotgls.a
move.w (a1)+,d7 ;aantal lijnen
move.w (a1)+,a0 ;kleur
moveq.l #0,d0
moveq.l #0,d1
moveq.l #0,d2
moveq.l #0,d3
move.l #$7fff,d4 ;minimale x
move.l #$7fff,d5 ;minimale y
sub.l a3,a3 ;maximale x
sub.l a4,a4 ;maximale y
rotgls.bx
move.w (a1)+,d2
subq.w #1,d2
muls #6,d2
movem.w (a2,d2.w),d0-d1 ;x1,y1
move.w (a1)+,d2
subq.w #1,d2
muls #6,d2
movem.w (a2,d2.w),d2-d3 ;x2,y2
movem.l d0-d7/a0-a6,-(sp)
lea mt,a0 ;scherm breedte tabel
cmp.w d1,d3 ;y1=y2 ?
beq rotgls.line.end
bgt.s rotgls.nohi
exg d0,d2
exg d1,d3
rotgls.nohi
move d0,d4
move d1,d5
add d5,d5
add d5,d5 ;*4
move.l rotchp-rot(a6),a1
add.l #rotplnw-rotc,a1
add.l (a0,d5.w),a1 ;y raw
lsr #4,d4 ;*16
add d4,d4 ;*2
lea (a1,d4.w),a1 ;x raw
sub.w d0,d2
sub.w d1,d3
moveq #15,d5
and.l d5,d0
move.w d0,d4
ror.l #4,d0
eor.w d5,d4
moveq #0,d5
bset d4,d5
move.w #4,d0
tst.w d2
bpl.s rotgls.l1
addq.w #1,d0
neg.w d2
rotgls.l1
cmp.w d2,d3
ble.s rotgls.l2
exg d2,d3
subq.w #4,d0
add.w d0,d0
rotgls.l2
move.w d3,d4
sub.w d2,d4
add.w d4,d4
add.w d4,d4
add.w d3,d3
moveq #0,d6
move.w d3,d6
sub.w d2,d6
bpl.s rotgls.l3
or.w #16,d0
rotgls.l3
add.w d3,d3
add.w d0,d0
add.w d0,d0
addq.w #1,d2
lsl.w #6,d2
addq.w #2,d2
swap d3
move.w d4,d3
or.l #$0b5a0003,d0
rotgls.line.wblit1
btst #6,$002(a5)
bne.s rotgls.line.wblit1
move.w #-1,$72(a5)
move.l #-1,$44(a5)
move.w #rot_wid,$60(a5)
move.w #rot_wid,$66(a5)
move.w #$8000,$74(a5)
eor.w d5,(a1) ;inverteert onderste punt lijn
move.l d3,$62(a5) ;bltmod b+a
move.w d6,$52(a5) ;bltapth
move.l a1,$48(a5) ;bltcpt
move.l a1,$54(a5) ;bltdpt
move.l d0,$40(a5) ;bltcon 0+1
move d2,$58(a5) ;bltsiz
rotgls.line.end
movem.l (sp)+,d0-d7/a0-a6
cmp.w d4,d0 ;minimale x halen
bge.s rotgls.ba
move.w d0,d4
rotgls.ba
cmp.w d4,d2
bge.s rotgls.bb
move.w d2,d4
rotgls.bb
cmp.w d5,d1 ;minimale y halen
bge.s rotgls.bc
move.w d1,d5
rotgls.bc
cmp.w d5,d3
bge.s rotgls.bd
move.w d3,d5
rotgls.bd
move.l d6,-(sp)
move.l a3,d6
cmp.w d6,d0 ;maximale x halen
ble.s rotgls.be
move.w d0,a3
rotgls.be
cmp.w d6,d2
ble.s rotgls.bf
move.w d2,a3
rotgls.bf
move.l a4,d6
cmp.w d6,d1 ;maximale y halen
ble.s rotgls.bg
move.w d1,a4
rotgls.bg
cmp.w d6,d3
ble.s rotgls.bh
move.w d3,a4
rotgls.bh
move.l (sp)+,d6
dbra d7,rotgls.bx
movem.l d0-d7/a0-a6,-(sp)
move.l rotchp-rot(a6),a2
add.l #rotpln1-rotc,a2
move.l a2,a1
add.l #rotplnw-rotpln1,a1 ;workplane
add.l real-rot(a6),a2 ;get scherm 2
move.w #rot_wid,d7 ;wordt modulo
sub.w #16,d4 ;ruimte voor min x
add.w #16,a3 ;ruimte voor max x
add.w #1,a4 ;ruimte voor max y
move.w a4,d0 ;maximale y
sub.w d5,d0 ;-minimale y
move.w d0,d2 ;y hoogte (in lijnen)
lsl.w #6,d0 ;*64
move.w a3,d1 ;maximale x
sub.w d4,d1 ;-minimale x
lsr.w #4,d1 ;/16
move.w d1,d3 ;x breedte (in words)
add.w d1,d0 ;bltsize
muls #rot_wid,d5 ;minimale y
add.l d5,a1 ;+workplane
lsr.l #1,d5 ;/2 (voor hi-res)
muls #rot_dpt,d5 ;minimale y
lsl.l #1,d5 ;*2
add.l d5,a2 ;+destination scherm
lsr.w #4,d4 ;/16 minimale x
lsl.w #1,d4 ;*2 minimale x
add.l d4,a1 ;+workplane
add.l d4,a2 ;+destination scherm
muls #rot_wid,d2 ;y hoogte
lsl.w #1,d3 ;*2 x breedte
sub.w d3,d7 ;module aftrekken
add.l d3,d2
move.l a1,a3 ;workscherm bewaren
add.l d2,a1 ;reverse fill add
rotpolgls.wblit1
btst #6,$002(a5)
bne.s rotpolgls.wblit1
move.l a1,$4c(a5) ;bltbpt
move.l a1,$54(a5) ;bltdpt
move.w d7,$62(a5) ;bltbmod
move.w d7,$66(a5) ;bltdmod
move #%0000010111001100,$40(a5) ;bltcon0
move #%0000000000010010,$42(a5) ;bltcon1
move d0,$58(a5) ;bltsiz
add.l #2,a3 ;reverse ?
add.l #2,a2 ;reverse ?
rotpolgls.wblit5
btst #6,$002(a5)
bne.s rotpolgls.wblit5
move.w #$f00+$ca,$040(a5) ;bltcon0
move.w #0,$042(a5) ;bltcon1
move.l #-1,$044(a5) ;mask
move.w d7,d6
add.w #rot_wid*(rot_dpt-1),d6
move.w d6,$60(a5) ;bltcmod
move.w d7,$62(a5) ;bltbmod
move.w d7,$64(a5) ;bltamod
move.w d6,$66(a5) ;bltdmod
move.w a0,d6 ;kleur halen
move.l a3,a4 ;empty positie
add.l #rotplne-rotplnw,a4
add.l #rot_wid*(rot_dpt-1),a2
move.w #rot_dpt-1,d1
rotpolgls.a
move.l a3,d2
btst d1,d6 ;kleurnbit test
beq.s rotpolgls.bx ;doorschijnend
rotpolgls.wblit3
btst #6,$002(a5)
bne.s rotpolgls.wblit3
move.l a2,$48(a5) ;bltcpt destination
move.l d2,$4c(a5) ;bltbpt picture
move.l a3,$50(a5) ;bltapt mask
move.l a2,$54(a5) ;bltdpt destination
move.w d0,$58(a5)
rotpolgls.bx
sub.l #rot_wid,a2
dbra d1,rotpolgls.a
rotpolgls.wblit4
btst #6,$002(a5)
bne.s rotpolgls.wblit4
move.w #0,$074(a5) ;a dat
move.l #0,$044(a5) ;mask
move.w #$100+$f0,$040(a5) ;bltcon0
move.w d7,$66(a5) ;bltdmod
move.l a3,$054(a5) ;destination
move.w d0,$58(a5)
movem.l (sp)+,d0-d7/a0-a6
dbra d6,rotgls.a
rotgls.end
bsr rot.wblit
movem.l (sp)+,d0-d7/a0-a6
rts
rotpolgls ;d4/d5/a3/a4
rts
line
movem.l d0-d7/a0-a6,-(sp)
lea mt,a0 ;scherm breedte tabel
cmp.w d1,d3 ;y1=y2 ?
beq line.end
bgt.s nohi
exg d0,d2
exg d1,d3
nohi
move d0,d4
move d1,d5
add d5,d5
add d5,d5 ;*4
move.l rotchp-rot(a6),a1
add.l #rotplnw-rotc,a1
add.l (a0,d5.w),a1 ;y raw
lsr #4,d4 ;*16
add d4,d4 ;*2
lea (a1,d4.w),a1 ;x raw
sub.w d0,d2
sub.w d1,d3
moveq #15,d5
and.l d5,d0
move.w d0,d4
ror.l #4,d0
eor.w d5,d4
moveq #0,d5
bset d4,d5
move.w #4,d0
tst.w d2
bpl.s l1
addq.w #1,d0
neg.w d2
l1 cmp.w d2,d3
ble.s l2
exg d2,d3
subq.w #4,d0
add.w d0,d0
l2 move.w d3,d4
sub.w d2,d4
add.w d4,d4
add.w d4,d4
add.w d3,d3
moveq #0,d6
move.w d3,d6
sub.w d2,d6
bpl.s l3
or.w #16,d0
l3 add.w d3,d3
add.w d0,d0
add.w d0,d0
addq.w #1,d2
lsl.w #6,d2
addq.w #2,d2
swap d3
move.w d4,d3
or.l #$0b5a0003,d0
;line.wblit1
; btst #6,$002(a5)
; bne line.wblit1
move.w #-1,$72(a5)
move.l #-1,$44(a5)
move.w #rot_wid,$60(a5)
move.w #rot_wid,$66(a5)
move.w #$8000,$74(a5)
eor.w d5,(a1) ;inverteert onderste punt lijn
move.l d3,$62(a5) ;bltmod b+a
move.w d6,$52(a5) ;bltapth
move.l a1,$48(a5) ;bltcpt
move.l a1,$54(a5) ;bltdpt
move.l d0,$40(a5) ;bltcon 0+1
move d2,$58(a5) ;bltsiz
bsr rot.wblit ;wait for blit
line.end
movem.l (sp)+,d0-d7/a0-a6
rts
line_init1 ;scherm breedte tabel
movem.l d0-d7/a0-a6,-(sp)
lea mt,a0 ;vullen
tst.l 4(a0) ;al gevuld ?
bne.s line_init1.end
moveq #0,d1
move #rot_hgt-1,d0
line_init1.a ;scherm breedte tabel
move.l d1,(a0)+
add.l #rot_wid,d1
dbf d0,line_init1.a
line_init1.end
movem.l (sp)+,d0-d7/a0-a6
rts
;DRAWLINE-ROUTINE
;d0 = x1
;d1 = y1
;d2 = x2
;d3 = y2
;uses d0-d6
DRAWLINE:
movem.l d0-d7/a0-a6,-(sp)
ifnd nodraw
move.l #rot_wid*rot_dpt,d4
mulu d1,d4
moveq #-$10,d5
and.w d0,d5
lsr.w #3,d5
add.w d5,d4
move.l rotchp-rot(a6),a0
add.l #rotpln1-rotc,a0
add.l real-rot(a6),a0 ;get scherm 2
add.l a0,d4 ;raw rotplanes
moveq.l #0,d5
sub.w d1,d3
roxl.b #1,d5
tst.w d3
bge.s Y2GY1
neg.w d3
Y2GY1: sub.w d0,d2
roxl.b #1,d5
tst.w d2
bge.s X2GX1
neg.w d2
X2GX1: move.w d3,d1 ;d3=deltay d1=d3
sub.w d2,d1 ;d2=deltax d1=deltay
bge.s DYGDX
exg d2,d3
DYGDX: roxl.b #1,d5
move.b octtabel(pc,d5),d5
add.w d2,d2 ;2*Gdelta
move.w d2,$0062(a5) ;d2 2*Gdelta
sub.w d3,d2 ;2*Gdelta-Kdelta
bge.s SIGNNL ;Negative then...
or.b #$40,d5 ;Set bit 6(=64) van octtant waarde
SIGNNL: move.w d2,$0052(a5) ;2*Gdelta-Kdelta in BLTAPTL
sub.w d3,d2 ;2*Gdelta-2*Kdelta
move.w d2,$0064(a5) ;in BLTAMOD
move.w #$8000,$0074(a5)
move.w #$ffff,$0072(a5)
move.l #$ffffffff,$0044(a5)
and.w #$000f,d0
ror.w #4,d0
or.w #$0bca,d0
move.w d0,$0040(a5)
move.w d5,$0042(a5)
move.l d4,$0048(a5)
move.l d4,$0054(a5)
move.w #rot_wid*rot_dpt,$0060(a5)
move.w #rot_wid*rot_dpt,$0066(a5)
addq.w #1,d3
lsl.w #6,d3
addq.w #2,d3
move.w d3,$0058(a5)
bsr rot.wblit
endc
movem.l (sp)+,d0-d7/a0-a6
rts
octtabel:
dc.b 0*4+1
dc.b 4*4+1
dc.b 2*4+1
dc.b 5*4+1
dc.b 1*4+1
dc.b 6*4+1
dc.b 3*4+1
dc.b 7*4+1
ifd mx68882 ;68882 routines by Roger Heykoop !
VECTOR: ;coordinaten bereken
; 6666 8888 8888 8888 2222
; 6 8 8 8 8 8 8 2
; 6 8 8 8 8 8 8 2
; 66666 8888 8888 8888 2222 optimized code
; 6 6 8 8 8 8 8 8 2
; 6 6 8 8 8 8 8 8 2
; 6666 8888 8888 8888 2222
movem.l d0-d7/a0-a6,-(sp)
LEA xy,A1 ;resultaten
move.l curvec-rot(a6),a0
add.l #vec_xyz,a0 ;info overslaan
ifd copperspeed
move.w #$f00,$dff180
endc
Vec_jmp:
Fmove.w XROT-rot(a6),Fp6 ;x rotatie in Fp0
Fmove.w YROT-rot(a6),Fp7 ;y rotatie in Fp1
Fmove.w ZROT-rot(a6),Fp2 ;z rotatie in Fp2
Fdiv.x #5.729577951E1,Fp6 ;deelt rotatie door 360/2pi
Fdiv.x #5.729577951E1,Fp7 ;en dus wordt het resultaat
Fdiv.x #5.729577951E1,Fp2 ;tussen on en 2pi !!!
Fsin.x Fp2,Fp4
Fcos.x Fp2,Fp5
Fsin.x Fp6,Fp0
Fcos.x Fp6,Fp1
Fsin.x Fp7,Fp2
Fcos.x Fp7,Fp3
MOVE.W (a0)+,D7 ;aantal punten
VECS:
;Fp0/Fp1/Fp2 zijn de rotatie angles ax ay en az van 0 tot 2pi
;Het resultaat na roteren x' y' en z' is:
; X'= X( cosay * cosaz) - Y( cosay * sinaz) + Z(sinax)
; Y'= X( sinax * sinay * cosaz) + Y(-sinax * sinay * sinaz) + Y(cosax * cosaz) - Z(sinax * sinay)
; Z'= X(-cosax * sinay * cosaz) + X( sinax * sinaz) + Y(cosax * sinay * sinaz) + Y(sinax * cosaz) + Z(cosax*cosay)
;
;Vervang vervolgens: sin ax Fp0
; cos ax Fp1
; sin ay Fp2
; cos ay Fp3
; sin az Fp4
; cos az Fp5
;
; X'= X( Fp3*Fp5) - Y( Fp3*Fp4) + Z(Fp0)
; Y'= X( Fp0*Fp2*Fp5) + Y(-Fp0*Fp2*Fp4) + Y(Fp1*Fp5) - Z(Fp0*Fp2)
; Z'= X(-Fp1*Fp2*Fp5) + X( Fp0*Fp4) + Y( Fp1*Fp2*Fp4) + Y(Fp0*Fp5) + Z(Fp1*Fp3)
;
; X'= X*Fp3*Fp5 - Y*Fp3*Fp4 + Z*Fp0
; Y'= X*Fp0*Fp2*Fp5 + Y*-Fp0*Fp2*Fp4 + Y*Fp1*Fp5 - Z*Fp0*Fp2
; Z'= X*-Fp1*Fp2*Fp5 + X*Fp0*Fp4 + Y*Fp1*Fp2*Fp4 + Y*Fp0*Fp5 + Z*Fp1*Fp3
movem.w (a0)+,d4/d5/d6 ;Haal x,y en z uit geheugen...
;1 memory access,spaart bergen tijd...
;input: d4/d5/d6 x,y,z
Fmove.w d4,Fp6 ;haal x
Fmove.x Fp6,Fp7
Fmul.x Fp3,Fp7
Fmul.x Fp5,Fp7
Fmove.l Fp7,d1 ;x' deel 1...
Fmove.x Fp6,Fp7
Fmul.x Fp0,Fp7
Fmul.x Fp2,Fp7
Fmul.x Fp5,Fp7
Fmove.l Fp7,d2 ;y' deel 1...
Fmove.x Fp6,Fp7
Fmul.x Fp1,Fp7
Fmul.x Fp2,Fp7
Fmul.x Fp5,Fp7
Fmove.l Fp7,d0
move.l d0,d3
neg.l d3 ;z' deel 1a...
Fmove.x Fp6,Fp7
Fmul.x Fp0,Fp7
Fmul.x Fp4,Fp7
Fmove.l Fp7,d0
add.l d0,d3 ;z' deel 1b...
Fmove.w d5,Fp6 ;haal y
Fmove.x Fp6,Fp7
Fmul.x Fp3,Fp7
Fmul.x Fp4,Fp7
Fmove.l Fp7,d0
sub.l d0,d1 ;x' deel 2...
Fmove.x Fp6,Fp7
Fmul.x Fp0,Fp7
Fmul.x Fp2,Fp7
Fmul.x Fp4,Fp7
Fmove.l Fp7,d0
sub.l d0,d2 ;y' deel 2a...
Fmove.x Fp6,Fp7
Fmul.x Fp1,Fp7
Fmul.x Fp5,Fp7
Fmove.l Fp7,d0
add.l d0,d2 ;y' deel 2b...
Fmove.x Fp6,Fp7
Fmul.x Fp1,Fp7
Fmul.x Fp2,Fp7
Fmul.x Fp4,Fp7
Fmove.l Fp7,d0
add.l d0,d3 ;z' deel 2a...
Fmove.x Fp6,Fp7
Fmul.x Fp0,Fp7
Fmul.x Fp5,Fp7
Fmove.l Fp7,d0
add.l d0,d3 ;z' deel 2b...
Fmove.w d6,Fp6 ;haal z
Fmove.x Fp6,Fp7
Fmul.x Fp0,Fp7
Fmove.l Fp7,d0
add.l d0,d1 ;x' deel 3...
Fmove.x Fp6,Fp7
Fmul.x Fp0,Fp7
Fmul.x Fp3,Fp7
Fmove.l Fp7,d0
sub.l d0,d2 ;y' deel 3...
Fmove.x Fp6,Fp7
Fmul.x Fp1,Fp7
Fmul.x Fp3,Fp7
Fmove.l Fp7,d0
add.l d0,d3 ;z' deel 3...
;nu: d1/d2/d3 bevat x'y'z'...
move.w d3,d4
add.w ZV-rot(a6),d4 ;z ball
sub.w ZV-rot(a6),D3 ;z centrum
move.w drot-rot(a6),d0 ;grote wereld
muls d0,D1 ;muls !
divs D3,D1 ;divs !
add.W XV-rot(a6),D1 ;x centrum
muls d0,D2 ;muls !
divs D3,D2 ;divs !
add.w YV-rot(a6),D2 ;y centrum
muls d0,D4 ;muls ! z ball
ifeq rot_hgt-384
lsr.l #8,d4 ;/256
lsr.l #3,d4 ;/2
move.w d4,d3
lsr.w #1,d4 ;/2
add.w d3,d4
endc
ifeq rot_hgt-(384*2) ;/6144
lsr.l #8,d4 ;/256
lsr.l #4,d4 ;/4
move.w d4,d3
lsr.w #1,d4 ;/2
add.w d3,d4
endc
movem.w d1/d2/d4,(a1)
add.l #3*2,a1
; lea 2(a0),a0
add.l #2,a0 ;kleur
Dbra D7,VECS ;Ah! A loop...Are the caches
;on mr. Zulu? Warp factor 9,sir!
ifd copperspeed
move.w #$000,$dff180
endc
movem.l (sp)+,d0-d7/a0-a6
RTS
endc
ifnd mx68882
VECTOR: ;coordinaten bereken
movem.l d0-d7/a0-a6,-(sp)
LEA xy,A1
LEA SINCOS+$5a,A2
ifd copperspeed
move.w #$f00,$dff180
endc
move.l curvec-rot(a6),a0
add.l #vec_xyz,a0 ;info overslaan
MOVE.W (a0)+,D7 ;aantal punten
VECS:
MOVE.W (A0)+,D0 ;x
MOVE.W D0,D2 ;
MOVE.W (A0)+,D1 ;y
MOVE.W D1,D3 ;
MOVE.W ZROT-rot(a6),D6 ;
MOVE.W $5a(A2,D6.W),D4 ;
MOVE.W -$5a(A2,D6.W),D5 ;
MULS.W D4,D0 ;
MULS.W D5,D1 ;
SUB.L D1,D0 ;
ADD.L D0,D0 ;
SWAP D0 ;
MULS.W D5,D2 ;muls !
MULS.W D4,D3 ;muls !
ADD.L D3,D2 ;
ADD.L D2,D2
SWAP D2 ;
MOVE.W D2,D4 ;
MOVE.W (A0)+,D1 ;z
MOVE.W D1,D3 ;
MOVE.W XROT-rot(a6),D6 ;x-rot
MOVE.W $5a(A2,D6.W),D5 ;
MOVE.W -$5a(A2,D6.W),D6 ;
MULS.W D5,D2 ;muls !
MULS.W D6,D1 ;muls !
SUB.L D1,D2 ;
ADD.L D2,D2
SWAP D2 ;
MULS.W D5,D3 ;muls !
MULS.W D6,D4 ;muls !
ADD.L D4,D3 ;
ADD.L D3,D3
SWAP D3 ;
MOVE.W D0,D1 ;
MOVE.W D3,D4 ;
MOVE.W YROT-rot(a6),D6 ;y-rot
MOVE.W $5a(A2,D6.W),D5 ;
MOVE.W -$5a(A2,D6.W),D6 ;
MULS.W D5,D3 ;
MULS.W D6,D0 ;
SUB.L D0,D3 ;
ADD.L D3,D3
SWAP D3 ;
MULS.W D6,D4 ;muls !
MULS.W D5,D1 ;muls !
ADD.L D4,D1 ;
ADD.L D1,D1
SWAP D1 ;d1=x d2=y d3=z na rotatie
move.w d3,d4
add.W ZV-rot(a6),d4 ;z ball
SUB.W ZV-rot(a6),D3 ;z centrum
move.w DROT-rot(a6),d0 ;grote wereld
MULS d0,D1 ;muls !
DIVS D3,D1 ;divs !
ADD.W XV-rot(a6),D1 ;x centrum
MULS d0,D2 ;muls !
DIVS D3,D2 ;divs !
ADD.W YV-rot(a6),D2 ;y centrum
MOVE.W D1,(A1)+ ;x
MOVE.W D2,(A1)+ ;y
MULS d0,D4 ;muls ! z ball
; divs #rot_hgt*20,d4 ;divs !
ifeq rot_hgt-384
lsr.l #8,d4 ;/256
lsr.l #3,d4 ;/2
move.w d4,d3
lsr.w #1,d4 ;/2
add.w d3,d4
endc
ifeq rot_hgt-(384*2) ;/6144
lsr.l #8,d4 ;/256
lsr.l #4,d4 ;/4
move.w d4,d3
lsr.w #1,d4 ;/2
add.w d3,d4
endc
MOVE.W d4,(A1)+ ;z
lea 2(a0),a0
; add.l #2,a0 ;kleur
Dbra D7,VECS
ifd copperspeed
move.w #$000,$dff180
endc
vector.end
movem.l (sp)+,d0-d7/a0-a6
RTS
endc
;rot.baldat ds.l 64*3*4
rotchp dc.l 0
curvec dc.l 0
rotpal dc.l 0
real: dc.l 0
XROT: dc.w 0 ;aantal graden te roteren om X-as
YROT: dc.w 0 ;aantal graden om Y-as
ZROT: dc.w 0 ;aantal om Z-as
DROT: dc.w 0
XV: dc.w (rot_wid+rot_cen)*4; ;centrum xcoord
YV: dc.w (rot_hgt/2) ;ycoord
ZV: dc.w 780 ;zcoord
xadd dc.w 0
yadd dc.w 0
zadd dc.w 0
dadd dc.w 0
dway dc.w 0
bufmod dc.b 0
clrmod dc.b 0
cnop 0,2
ifnd mx68882
SINCOS:
dc.w 0,571,1143,1714,2285,2855,3425,3993
dc.w 4560,5125,5689,6252,6812,7370,7927,8480
dc.w 9031,9580,10125,10667,11206,11742,12274,12803
dc.w 13327,13847,14364,14875,15383,15885,16383,16876
dc.w 17363,17846,18323,18794,19259,19719,20173,20620
dc.w 21062,21497,21925,22347,22761,23169,23570,23964
dc.w 24350,24729,25100,25464,25820,26168,26509,26841
dc.w 27165,27480,27788,28086,28377,28658,28931,29195
dc.w 29450,29696,29934,30162,30381,30590,30790,30981
dc.w 31163,31335,31497,31650,31793,31927,32050,32164
dc.w 32269,32363,32448,32522,32587,32642,32687,32722
dc.w 32747,32762,32767,32762,32747,32722,32687,32642
dc.w 32587,32522,32448,32363,32269,32164,32050,31927
dc.w 31793,31650,31497,31335,31163,30981,30790,30590
dc.w 30381,30162,29934,29696,29450,29195,28931,28658
dc.w 28377,28086,27787,27480,27165,26841,26509,26168
dc.w 25820,25464,25100,24729,24350,23964,23570,23169
dc.w 22761,22347,21925,21497,21062,20620,20173,19719
dc.w 19259,18794,18323,17846,17363,16876,16383,15885
dc.w 15383,14875,14364,13848,13327,12803,12274,11742
dc.w 11207,10667,10125,9580,9031,8480,7927,7371
dc.w 6812,6252,5690,5126,4560,3993,3425,2855
dc.w 2285,1715,1143,572,0
dc.w -571,-1143,-1714
dc.w -2285,-2855,-3424,-3993,-4560,-5125,-5689,-6252
dc.w -6812,-7370,-7926,-8480,-9031,-9579,-10125,-10667
dc.w -11206,-11742,-12274,-12802,-13327,-13847,-14363,-14875
dc.w -15382,-15885,-16383,-16876,-17363,-17845,-18322,-18794
dc.w -19259,-19719,-20173,-20620,-21062,-21496,-21925,-22346
dc.w -22761,-23169,-23570,-23964,-24350,-24729,-25100,-25464
dc.w -25820,-26168,-26508,-26840,-27164,-27480,-27787,-28086
dc.w -28376,-28658,-28931,-29195,-29450,-29696,-29933,-30162
dc.w -30380,-30590,-30790,-30981,-31163,-31335,-31497,-31650
dc.w -31793,-31927,-32050,-32164,-32269,-32363,-32448,-32522
dc.w -32587,-32642,-32687,-32722,-32747,-32762,-32767,-32762
dc.w -32747,-32722,-32687,-32642,-32587,-32522,-32448,-32363
dc.w -32269,-32165,-32051,-31927,-31793,-31650,-31497,-31335
dc.w -31163,-30981,-30791,-30590,-30381,-30162,-29934,-29697
dc.w -29451,-29195,-28931,-28658,-28377,-28087,-27788,-27481
dc.w -27165,-26841,-26509,-26169,-25821,-25465,-25101,-24729
dc.w -24351,-23964,-23571,-23170,-22762,-22347,-21925,-21497
dc.w -21062,-20621,-20173,-19720,-19260,-18794,-18323,-17846
dc.w -17364,-16876,-16384,-15886,-15383,-14876,-14364,-13848
dc.w -13328,-12803,-12275,-11743,-11207,-10668,-10126,-9580
dc.w -9032,-8481,-7927,-7371,-6813,-6252,-5690,-5126
dc.w -4560,-3994,-3425,-2856,-2286,-1715,-1144,-572
dc.w 0,571,1142,1714,2284,2855,3424,3992
dc.w 4559,5125,5689,6251,6811,7370,7926,8479
dc.w 9031,9579,10124,10667,11206,11741,12273,12802
dc.w 13326,13847,14363,14875,15382,15885,16382,16875
dc.w 17363,17845,18322,18793,19259,19718,20172,20620
dc.w 21061,21496,21924,22346,22761,23169,23569,23963
dc.w 24350,24728,25100,25464,25820,26168,26508,26840
dc.w 27164,27480,27787,28086,28376,28658,28931,29195
dc.w 29450,29696,29933,30161,30380,30590,30790,30981
dc.w 31162,31334,31497,31650,31793,31926,32050,32164
dc.w 32269,32363,32447,32522,32587,32642,32687,32722
dc.w 32747,32761,32767
endc
rotbaltab ds.l 64
xy ds.l 2*1024 ;x/y/z coordinaten
rotdontab ds.l 2*1024 ;is getekend tabel
mt ds.l rot_hgt ;mulutable (faster)
;pic_wid equ 4 ;wide in bytes
;pic_hgt equ 6 ;hoogte
;pic_dpt equ 8 ;number planes
;pic_ani equ 10 ;aantal effes (anim)
;pic_vew equ 12 ;viewmode
;pic_cycstr equ 14 ;cycle start (*4)
;pic_cycend equ 15 ;cycle end (*4)
;pic_cycspd equ 16 ;cycle speed (*4)
;pic_cycadd equ 17 ;cycle add (*4)
;pic_palnum equ 30 ;aantal kleuren
;pic_pal equ 32 ;palette start
;pic_palsiz equ 256*2 ;vaste palette size
;pic_raw equ pic_pal+pic_palsiz ;palette start
rotp.e
SECTION 4,CODE_c
cnop 0,8
rotc
ifnd ocs
dc.l 'ROTA' ;effect-longword-ID
endc
ifd ocs
dc.l 'ROTO' ;effect-longword-ID
endc
rts
cnop 0,8
;copperlijst in geval van vectorshade
ifd shade
rotcop
dc.w $0080,$0000,$0082,$0000 ;vt-copper terugspring-adres
dc.w $00e4,$0000,$00e6,$0000
dc.w $00e8,$0000,$00ea,$0000
dc.w $00ec,$0000,$00ee,$0000
dc.w $00f0,$0000,$00f2,$0000
dc.w $0100,$5000
dc.w $0108,rot_wid-vew_wid
dc.w $010a,rot_wid-vew_wid
dc.w $0088,$0000 ;terug naar vt-copper
dc.w $ffff,$fffe
endc
;dit zijn de picture-tabellen, 2 voor double buffer
;of 6 voor vectorshade
cnop 0,8
rotpic1
dc.l 'PICT'
dc.w rot_wid,rot_hgt,rot_dpt,1,rot_vew
ifd ocs
ds.b 4*4
endc
ifnd ocs
ds.b 8*4+16
endc
ifeq 1-rot_dpt
ifnd shade
dc.w 2-1
rotpal1
ifd ocs
dc.w $000,$fff
ds.w 256-2
endc
ifnd ocs
dc.w $000,0,$fff,0
ds.l 256-2
endc
endc
ifd shade
dc.w 32-1
rotpal1
ifd ocs
dc.w $000,$fff,$ccc,$fff,$999,$fff,$ccc,$fff
dc.w $666,$fff,$ccc,$fff,$999,$fff,$ccc,$fff
dc.w $333,$fff,$ccc,$fff,$999,$fff,$ccc,$fff
dc.w $666,$fff,$ccc,$fff,$999,$fff,$ccc,$fff
ds.w 256-32
endc
ifnd ocs
dc.w $000,0,$fff,0,$ccc,0,$fff,0,$999,0,$fff,0,$ccc,0,$fff,0
dc.w $666,0,$fff,0,$ccc,0,$fff,0,$999,0,$fff,0,$ccc,0,$fff,0
dc.w $333,0,$fff,0,$ccc,0,$fff,0,$999,0,$fff,0,$ccc,0,$fff,0
dc.w $666,0,$fff,0,$ccc,0,$fff,0,$999,0,$fff,0,$ccc,0,$fff,0
ds.l 256-32
endc
endc
endc
ifeq 2-rot_dpt
dc.w 4-1
rotpal1
ifd ocs
dc.w $000,$f0f,$0ff,$fff
ds.w 256-4
endc
ifnd ocs
dc.w $000,0,$f0f,0,$0ff,0,$fff,0
ds.l 256-4
endc
endc
ifeq 3-rot_dpt
dc.w 8-1
rotpal1
ifd ocs
dc.w $000,$f00,$0f0,$ff0,$00f,$f0f,$0ff,$fff
ds.w 256-8
endc
ifnd ocs
dc.w $000,0,$f00,0,$0f0,0,$ff0,0,$00f,0,$f0f,0,$0ff,0,$fff,0
ds.l 256-8
endc
endc
ifeq 4-rot_dpt
dc.w 16-1
rotpal1
ifd ocs
dc.w $000,$f00,$0f0,$ff0,$00f,$f0f,$0ff,$fff
dc.w $555,$f55,$5f5,$ff5,$55f,$f5f,$5ff,$fff
ds.w 256-16
endc
ifnd ocs
dc.w $000,0,$f00,0,$0f0,0,$ff0,0,$00f,0,$f0f,0,$0ff,0,$fff,0
dc.w $555,0,$f55,0,$5f5,0,$ff5,0,$55f,0,$f5f,0,$5ff,0,$fff,0
ds.l 256-16
endc
endc
ifeq 5-rot_dpt
dc.w 32-1
rotpal1
ifd ocs
dc.w $000,$111,$222,$333,$444,$555,$666,$777
dc.w $888,$999,$aaa,$bbb,$ccc,$ddd,$eee,$fff
dc.w $00,$11,$22,$33,$44,$55,$66,$77
dc.w $88,$99,$aa,$bb,$cc,$dd,$ee,$ff
ds.w 256-32
endc
ifnd ocs
dc.w $000,0,$111,0,$222,0,$333,0,$444,0,$555,0,$666,0,$777,0
dc.w $888,0,$999,0,$aaa,0,$bbb,0,$ccc,0,$ddd,0,$eee,0,$fff,0
dc.w $00,0,$11,0,$22,0,$33,0,$44,0,$55,0,$66,0,$77,0
dc.w $88,0,$99,0,$aa,0,$bb,0,$cc,0,$dd,0,$ee,0,$ff,0
ds.l 256-32
endc
endc
ifeq 6-rot_dpt
dc.w 32-1
rotpal1
ifd ocs
dc.w $000,$111,$222,$333,$444,$555,$666,$777
dc.w $888,$999,$aaa,$bbb,$ccc,$ddd,$eee,$fff
dc.w $00,$11,$22,$33,$44,$55,$66,$77
dc.w $88,$99,$aa,$bb,$cc,$dd,$ee,$ff
ds.w 256-32
endc
ifnd ocs
dc.w $000,0,$111,0,$222,0,$333,0,$444,0,$555,0,$666,0,$777,0
dc.w $888,0,$999,0,$aaa,0,$bbb,0,$ccc,0,$ddd,0,$eee,0,$fff,0
dc.w $00,0,$11,0,$22,0,$33,0,$44,0,$55,0,$66,0,$77,0
dc.w $88,0,$99,0,$aa,0,$bb,0,$cc,0,$dd,0,$ee,0,$ff,0
ds.l 256-32
endc
endc
rotpln1
ds.b rot_wid*rot_hgt*rot_dpt
cnop 0,8
rotpic2
dc.l 'PICT'
dc.w rot_wid,rot_hgt,rot_dpt,1,rot_vew
ifd ocs
ds.b 4*4
endc
ifnd ocs
ds.b 8*4+16
endc
ifeq 1-rot_dpt
ifnd shade
dc.w 2-1
rotpal2
ifd ocs
dc.w $000,$fff
ds.w 256-2
endc
ifnd ocs
dc.w $000,0,$fff,0
ds.l 256-2
endc
endc
ifd shade
dc.w 32-1
rotpal2
ifd ocs
dc.w $000,$fff,$ccc,$fff,$999,$fff,$ccc,$fff
dc.w $666,$fff,$ccc,$fff,$999,$fff,$ccc,$fff
dc.w $333,$fff,$ccc,$fff,$999,$fff,$ccc,$fff
dc.w $666,$fff,$ccc,$fff,$999,$fff,$ccc,$fff
ds.w 256-32
endc
ifnd ocs
dc.w $000,0,$fff,0,$ccc,0,$fff,0,$999,0,$fff,0,$ccc,0,$fff,0
dc.w $666,0,$fff,0,$ccc,0,$fff,0,$999,0,$fff,0,$ccc,0,$fff,0
dc.w $333,0,$fff,0,$ccc,0,$fff,0,$999,0,$fff,0,$ccc,0,$fff,0
dc.w $666,0,$fff,0,$ccc,0,$fff,0,$999,0,$fff,0,$ccc,0,$fff,0
ds.l 256-32
endc
endc
endc
ifeq 2-rot_dpt
dc.w 4-1
rotpal2
ifd ocs
dc.w $000,$f0f,$0ff,$fff
ds.w 256-4
endc
ifnd ocs
dc.w $000,0,$f0f,0,$0ff,0,$fff,0
ds.l 256-4
endc
endc
ifeq 3-rot_dpt
dc.w 8-1
rotpal2
ifd ocs
dc.w $000,$f00,$0f0,$ff0,$00f,$f0f,$0ff,$fff
ds.w 256-8
endc
ifnd ocs
dc.w $000,0,$f00,0,$0f0,0,$ff0,0,$00f,0,$f0f,0,$0ff,0,$fff,0
ds.l 256-8
endc
endc
ifeq 4-rot_dpt
dc.w 16-1
rotpal2
ifd ocs
dc.w $000,$f00,$0f0,$ff0,$00f,$f0f,$0ff,$fff
dc.w $555,$f55,$5f5,$ff5,$55f,$f5f,$5ff,$fff
ds.w 256-16
endc
ifnd ocs
dc.w $000,0,$f00,0,$0f0,0,$ff0,0,$00f,0,$f0f,0,$0ff,0,$fff,0
dc.w $555,0,$f55,0,$5f5,0,$ff5,0,$55f,0,$f5f,0,$5ff,0,$fff,0
ds.l 256-16
endc
endc
ifeq 5-rot_dpt
dc.w 32-1
rotpal2
ifd ocs
dc.w $000,$111,$222,$333,$444,$555,$666,$777
dc.w $888,$999,$aaa,$bbb,$ccc,$ddd,$eee,$fff
dc.w $00,$11,$22,$33,$44,$55,$66,$77
dc.w $88,$99,$aa,$bb,$cc,$dd,$ee,$ff
ds.w 256-32
endc
ifnd ocs
dc.w $000,0,$111,0,$222,0,$333,0,$444,0,$555,0,$666,0,$777,0
dc.w $888,0,$999,0,$aaa,0,$bbb,0,$ccc,0,$ddd,0,$eee,0,$fff,0
dc.w $00,0,$11,0,$22,0,$33,0,$44,0,$55,0,$66,0,$77,0
dc.w $88,0,$99,0,$aa,0,$bb,0,$cc,0,$dd,0,$ee,0,$ff,0
ds.l 256-32
endc
endc
ifeq 6-rot_dpt
dc.w 32-1
rotpal2
ifd ocs
dc.w $000,$111,$222,$333,$444,$555,$666,$777
dc.w $888,$999,$aaa,$bbb,$ccc,$ddd,$eee,$fff
dc.w $00,$11,$22,$33,$44,$55,$66,$77
dc.w $88,$99,$aa,$bb,$cc,$dd,$ee,$ff
ds.w 256-32
endc
ifnd ocs
dc.w $000,0,$111,0,$222,0,$333,0,$444,0,$555,0,$666,0,$777,0
dc.w $888,0,$999,0,$aaa,0,$bbb,0,$ccc,0,$ddd,0,$eee,0,$fff,0
dc.w $00,0,$11,0,$22,0,$33,0,$44,0,$55,0,$66,0,$77,0
dc.w $88,0,$99,0,$aa,0,$bb,0,$cc,0,$dd,0,$ee,0,$ff,0
ds.l 256-32
endc
endc
rotpln2
ds.b rot_wid*rot_hgt*rot_dpt
ifd shade
rept 4
ifd ocs
dc.l 'PICT'
dc.w rot_wid,rot_hgt,rot_dpt,1,rot_vew
ds.b 4*4
dc.w 32-1
dc.w $000,$fff,$ccc,$fff,$999,$fff,$ccc,$fff
dc.w $666,$fff,$ccc,$fff,$999,$fff,$ccc,$fff
dc.w $333,$fff,$ccc,$fff,$999,$fff,$ccc,$fff
dc.w $666,$fff,$ccc,$fff,$999,$fff,$ccc,$fff
ds.w 256-32
ds.b rot_wid*rot_hgt*rot_dpt
endc
ifnd ocs
dc.l 'PICT'
dc.w rot_wid,rot_hgt,rot_dpt,1,rot_vew
ds.b 8*4+16
dc.w 32-1
dc.w $000,0,$fff,0,$ccc,0,$fff,0,$999,0,$fff,0,$ccc,0,$fff,0
dc.w $666,0,$fff,0,$ccc,0,$fff,0,$999,0,$fff,0,$ccc,0,$fff,0
dc.w $333,0,$fff,0,$ccc,0,$fff,0,$999,0,$fff,0,$ccc,0,$fff,0
dc.w $666,0,$fff,0,$ccc,0,$fff,0,$999,0,$fff,0,$ccc,0,$fff,0
ds.l 256-32
ds.b rot_wid*rot_hgt*rot_dpt
endc
endr
endc
rotpic_l equ rotpic2-rotpic1
rotinf_l equ rotpln1-rotpic1
; Section plane,data_c
cnop 0,8
rotplnw
ds.b rot_wid*rot_hgt ;work bitplane (filled vectors)
cnop 0,8
rotplne
ds.b rot_wid*rot_hgt ;empty bitplane (filled vectors)
rotc.e
rot.e
;**********************************************************************
;and here are the incbin-files....
ifd rout
cnop 0,2
Section Data,Data ;32-bits fast-mem !
rottube
ifd ocs
incbin 'w:Effect/Tube.vec'
endc
ifnd ocs
incbin 'w:EffectAGA/Tube.rotobj'
endc
endc